Skip to main content

subcog/io/
mod.rs

1//! Import/Export I/O subsystem.
2//!
3//! Provides bulk memory import and structured export capabilities with support
4//! for multiple file formats (JSON, YAML, CSV, Parquet).
5//!
6//! # Architecture
7//!
8//! The I/O subsystem uses a clean trait-based architecture:
9//!
10//! - **Format adapters** implement [`ImportSource`] and [`ExportSink`] traits
11//! - **Validation layer** normalizes and validates imported data
12//! - **Services** orchestrate format parsing, validation, and storage
13//!
14//! # Supported Formats
15//!
16//! | Format | Import | Export | Notes |
17//! |--------|--------|--------|-------|
18//! | JSON | ✓ | ✓ | Newline-delimited (NDJSON) or array |
19//! | YAML | ✓ | ✓ | Document stream |
20//! | CSV | ✓ | ✓ | Configurable column mapping |
21//! | Parquet | - | ✓ | Requires `parquet-export` feature |
22//!
23//! # Examples
24//!
25//! ## Import memories from JSON
26//!
27//! ```rust,ignore
28//! use subcog::io::{ImportService, ImportOptions, Format};
29//! use std::fs::File;
30//!
31//! let file = File::open("memories.json")?;
32//! let result = service.import_from_reader(file, ImportOptions {
33//!     format: Format::Json,
34//!     skip_duplicates: true,
35//!     ..Default::default()
36//! })?;
37//! println!("Imported {} memories", result.imported);
38//! ```
39//!
40//! ## Export memories to CSV
41//!
42//! ```rust,ignore
43//! use subcog::io::{ExportService, ExportOptions, Format};
44//! use std::fs::File;
45//!
46//! let file = File::create("memories.csv")?;
47//! let result = service.export_to_writer(file, ExportOptions {
48//!     format: Format::Csv,
49//!     filter: Some("ns:decisions since:7d".to_string()),
50//!     ..Default::default()
51//! })?;
52//! println!("Exported {} memories", result.exported);
53//! ```
54
55pub mod formats;
56pub mod services;
57pub mod traits;
58pub mod validation;
59
60// Re-exports for convenience
61pub use formats::Format;
62pub use services::export::{ExportOptions, ExportResult, ExportService};
63pub use services::import::{ImportOptions, ImportProgress, ImportResult, ImportService};
64pub use traits::{ExportSink, ImportSource, ImportedMemory};
65pub use validation::{ImportValidator, ValidationIssue, ValidationResult};