1use rusqlite::ToSql;
2use rusqlite::types::FromSql;
3use std::borrow::Borrow;
4use time::{OffsetDateTime, PrimitiveDateTime, UtcOffset};
5
6pub struct DateTime(PrimitiveDateTime);
10
11impl<T: Borrow<OffsetDateTime>> From<T> for DateTime {
12 fn from(value: T) -> Self {
13 let utc = value.borrow().to_offset(UtcOffset::UTC);
14 Self(PrimitiveDateTime::new(utc.date(), utc.time()))
15 }
16}
17
18impl Into<OffsetDateTime> for DateTime {
19 fn into(self) -> OffsetDateTime {
20 self.0.assume_utc()
21 }
22}
23
24impl ToSql for DateTime {
25 fn to_sql(&self) -> rusqlite::Result<rusqlite::types::ToSqlOutput<'_>> {
26 self.0.to_sql()
27 }
28}
29
30impl FromSql for DateTime {
31 fn column_result(value: rusqlite::types::ValueRef<'_>) -> rusqlite::types::FromSqlResult<Self> {
32 PrimitiveDateTime::column_result(value).map(|dt| Self(dt))
33 }
34}