use faucet_stream::CsvOptions;
use faucet_stream::Pipeline;
use faucet_stream::sink::sqlite::{SqliteColumnMapping, SqliteSink, SqliteSinkConfig};
use faucet_stream::source::file::{FileSource, FileSourceConfig, FileSourceFormat};
#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
let mut config = FileSourceConfig::new("inventory.tsv").format(FileSourceFormat::Csv);
config.csv = CsvOptions {
has_headers: false,
delimiter: "\t".into(),
quote: "'".into(),
..CsvOptions::default()
};
let source = FileSource::new(config)?;
let sink = SqliteSink::new(
SqliteSinkConfig::new("sqlite:./inventory.db", "inventory")
.column_mapping(SqliteColumnMapping::Json {
column: "row".into(),
})
.with_batch_size(500)
.max_connections(4),
)
.await?;
let result = Pipeline::new(&source, &sink).run().await?;
println!(
"imported {} inventory rows into SQLite",
result.records_written
);
Ok(())
}