cassandra_protocol/types/
from_cdrs.rs1use 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> {}