cdbc_sqlite/types/
time.rs1use std::borrow::Cow;
2use mco::std::time::RFC3339_NANO;
3use mco::std::time::time::{Time};
4use cdbc::decode::Decode;
5use cdbc::error::BoxDynError;
6use cdbc::types::Type;
7use cdbc::encode::{Encode, IsNull};
8use crate::{Sqlite, SqliteArgumentValue, SqliteTypeInfo, SqliteValueRef};
9
10impl Type<Sqlite> for Time {
11 fn type_info() -> SqliteTypeInfo {
12 <&str as Type<Sqlite>>::type_info()
13 }
14}
15
16impl<'q> Encode<'q, Sqlite> for Time {
17 fn encode(self, args: &mut Vec<SqliteArgumentValue<'q>>) -> IsNull {
18 args.push(SqliteArgumentValue::Text(Cow::Owned(self.to_string())));
19
20 IsNull::No
21 }
22
23 fn encode_by_ref(&self, args: &mut Vec<SqliteArgumentValue<'q>>) -> IsNull {
24 args.push(SqliteArgumentValue::Text(Cow::Owned(self.to_string())));
25
26 IsNull::No
27 }
28}
29
30impl<'r> Decode<'r, Sqlite> for Time {
31 fn decode(value: SqliteValueRef<'r>) -> Result<Self, BoxDynError> {
32 Ok(Time::parse(RFC3339_NANO,value.text()?)?)
33 }
34}