connectorx/transports/
csv_arrow.rs1use crate::destinations::arrow::{
4 typesystem::{ArrowTypeSystem, DateTimeWrapperMicro},
5 ArrowDestination, ArrowDestinationError,
6};
7use crate::sources::csv::{CSVSource, CSVSourceError, CSVTypeSystem};
8use crate::typesystem::TypeConversion;
9use chrono::{DateTime, Utc};
10use thiserror::Error;
11
12pub struct CSVArrowTransport;
14
15#[derive(Error, Debug)]
16pub enum CSVArrowTransportError {
17 #[error(transparent)]
18 Source(#[from] CSVSourceError),
19
20 #[error(transparent)]
21 Destination(#[from] ArrowDestinationError),
22
23 #[error(transparent)]
24 ConnectorX(#[from] crate::errors::ConnectorXError),
25}
26
27impl_transport!(
28 name = CSVArrowTransport,
29 error = CSVArrowTransportError,
30 systems = CSVTypeSystem => ArrowTypeSystem,
31 route = CSVSource => ArrowDestination,
32 mappings = {
33 { F64[f64] => Float64[f64] | conversion auto}
34 { I64[i64] => Int64[i64] | conversion auto}
35 { Bool[bool] => Boolean[bool] | conversion auto}
36 { String[String] => LargeUtf8[String] | conversion auto}
37 { DateTime[DateTime<Utc>] => DateTimeTzMicro[DateTimeWrapperMicro] | conversion option}
38 }
39);
40
41impl TypeConversion<DateTime<Utc>, DateTimeWrapperMicro> for CSVArrowTransport {
42 fn convert(val: DateTime<Utc>) -> DateTimeWrapperMicro {
43 DateTimeWrapperMicro(val)
44 }
45}