cassandra_protocol/types/
from_cdrs.rs

1use std::net::IpAddr;
2use std::num::{NonZeroI16, NonZeroI32, NonZeroI64, NonZeroI8};
3
4use chrono::prelude::*;
5use time::PrimitiveDateTime;
6use uuid::Uuid;
7
8use crate::error::Result as CdrsResult;
9use crate::types::blob::Blob;
10use crate::types::decimal::Decimal;
11use crate::types::list::List;
12use crate::types::map::Map;
13use crate::types::tuple::Tuple;
14use crate::types::udt::Udt;
15use crate::types::{AsRustType, ByName, IntoRustByName};
16
17pub trait FromCdrs {
18    fn from_cdrs<T>(cdrs_type: T) -> CdrsResult<Option<Self>>
19    where
20        Self: Sized,
21        T: AsRustType<Self>,
22    {
23        cdrs_type.as_rust_type()
24    }
25
26    fn from_cdrs_r<T>(cdrs_type: T) -> CdrsResult<Self>
27    where
28        Self: Sized,
29        T: AsRustType<Self>,
30    {
31        cdrs_type.as_r_type()
32    }
33}
34
35impl FromCdrs for Blob {}
36impl FromCdrs for String {}
37impl FromCdrs for bool {}
38impl FromCdrs for i64 {}
39impl FromCdrs for i32 {}
40impl FromCdrs for i16 {}
41impl FromCdrs for i8 {}
42impl FromCdrs for f64 {}
43impl FromCdrs for f32 {}
44impl FromCdrs for IpAddr {}
45impl FromCdrs for Uuid {}
46impl FromCdrs for List {}
47impl FromCdrs for Map {}
48impl FromCdrs for Udt {}
49impl FromCdrs for Tuple {}
50impl FromCdrs for PrimitiveDateTime {}
51impl FromCdrs for Decimal {}
52impl FromCdrs for NonZeroI8 {}
53impl FromCdrs for NonZeroI16 {}
54impl FromCdrs for NonZeroI32 {}
55impl FromCdrs for NonZeroI64 {}
56impl FromCdrs for NaiveDateTime {}
57impl<Tz: TimeZone> FromCdrs for DateTime<Tz> {}
58
59pub trait FromCdrsByName {
60    fn from_cdrs_by_name<T>(cdrs_type: &T, name: &str) -> CdrsResult<Option<Self>>
61    where
62        Self: Sized,
63        T: ByName + IntoRustByName<Self>,
64    {
65        cdrs_type.by_name(name)
66    }
67
68    fn from_cdrs_r<T>(cdrs_type: &T, name: &str) -> CdrsResult<Self>
69    where
70        Self: Sized,
71        T: ByName + IntoRustByName<Self> + ::std::fmt::Debug,
72    {
73        cdrs_type.r_by_name(name)
74    }
75}
76
77impl FromCdrsByName for Blob {}
78impl FromCdrsByName for String {}
79impl FromCdrsByName for bool {}
80impl FromCdrsByName for i64 {}
81impl FromCdrsByName for i32 {}
82impl FromCdrsByName for i16 {}
83impl FromCdrsByName for i8 {}
84impl FromCdrsByName for f64 {}
85impl FromCdrsByName for f32 {}
86impl FromCdrsByName for IpAddr {}
87impl FromCdrsByName for Uuid {}
88impl FromCdrsByName for List {}
89impl FromCdrsByName for Map {}
90impl FromCdrsByName for Udt {}
91impl FromCdrsByName for Tuple {}
92impl FromCdrsByName for PrimitiveDateTime {}
93impl FromCdrsByName for Decimal {}
94impl FromCdrsByName for NonZeroI8 {}
95impl FromCdrsByName for NonZeroI16 {}
96impl FromCdrsByName for NonZeroI32 {}
97impl FromCdrsByName for NonZeroI64 {}
98impl FromCdrsByName for NaiveDateTime {}
99impl<Tz: TimeZone> FromCdrsByName for DateTime<Tz> {}