connectorx/transports/
dummy_arrow.rs1use crate::destinations::arrow::{
4 typesystem::{ArrowTypeSystem, NaiveDateTimeWrapperMicro},
5 ArrowDestination, ArrowDestinationError,
6};
7use crate::sources::dummy::{DummySource, DummyTypeSystem};
8use crate::typesystem::TypeConversion;
9use chrono::{DateTime, NaiveDate, NaiveDateTime, Utc};
10use thiserror::Error;
11
12pub struct DummyArrowTransport;
14
15#[derive(Error, Debug)]
16pub enum DummyArrowTransportError {
17 #[error(transparent)]
18 Destination(#[from] ArrowDestinationError),
19
20 #[error(transparent)]
21 ConnectorX(#[from] crate::errors::ConnectorXError),
22}
23
24impl_transport!(
25 name = DummyArrowTransport,
26 error = DummyArrowTransportError,
27 systems = DummyTypeSystem => ArrowTypeSystem,
28 route = DummySource => 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>] => Date64Micro[NaiveDateTimeWrapperMicro] | conversion option}
35 }
36);
37
38impl TypeConversion<DateTime<Utc>, NaiveDateTimeWrapperMicro> for DummyArrowTransport {
39 fn convert(val: DateTime<Utc>) -> NaiveDateTimeWrapperMicro {
40 NaiveDateTimeWrapperMicro(val.naive_utc())
41 }
42}
43
44impl TypeConversion<NaiveDateTime, DateTime<Utc>> for DummyArrowTransport {
45 fn convert(val: NaiveDateTime) -> DateTime<Utc> {
46 DateTime::from_naive_utc_and_offset(val, Utc)
47 }
48}
49
50impl TypeConversion<NaiveDate, DateTime<Utc>> for DummyArrowTransport {
51 fn convert(val: NaiveDate) -> DateTime<Utc> {
52 DateTime::from_naive_utc_and_offset(
53 val.and_hms_opt(0, 0, 0)
54 .unwrap_or_else(|| panic!("and_hms_opt return None")),
55 Utc,
56 )
57 }
58}