connectorx/transports/
csv_arrow.rs

1//! Transport from CSV Source to Arrow Destination.
2
3use crate::destinations::arrow::{ArrowDestination, ArrowDestinationError, ArrowTypeSystem};
4use crate::sources::csv::{CSVSource, CSVSourceError, CSVTypeSystem};
5use crate::typesystem::TypeConversion;
6use chrono::{DateTime, Utc};
7use thiserror::Error;
8
9/// Convert CSV data types to Arrow data types.
10pub struct CSVArrowTransport;
11
12#[derive(Error, Debug)]
13pub enum CSVArrowTransportError {
14    #[error(transparent)]
15    Source(#[from] CSVSourceError),
16
17    #[error(transparent)]
18    Destination(#[from] ArrowDestinationError),
19
20    #[error(transparent)]
21    ConnectorX(#[from] crate::errors::ConnectorXError),
22}
23
24impl_transport!(
25    name = CSVArrowTransport,
26    error = CSVArrowTransportError,
27    systems = CSVTypeSystem => ArrowTypeSystem,
28    route = CSVSource => ArrowDestination,
29    mappings = {
30        { F64[f64]                => Float64[f64]              | conversion auto}
31        { I64[i64]                => Int64[i64]                | conversion auto}
32        { Bool[bool]              => Boolean[bool]             | conversion auto}
33        { String[String]          => LargeUtf8[String]         | conversion auto}
34        { DateTime[DateTime<Utc>] => DateTimeTz[DateTime<Utc>] | conversion auto}
35    }
36);