cratestack_rusqlite/value/
columns.rs1use cratestack_core::Value;
5use rusqlite::types::{FromSql, FromSqlResult, ValueRef};
6
7use super::decode::{decode_datetime, decode_decimal, decode_json, decode_uuid};
8
9#[derive(Debug, Clone, Copy)]
10pub struct UuidColumn(pub uuid::Uuid);
11
12impl FromSql for UuidColumn {
13 fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self> {
14 let raw = value.as_str()?;
15 decode_uuid(raw).map(UuidColumn)
16 }
17}
18
19#[derive(Debug, Clone, Copy)]
20pub struct DateTimeColumn(pub chrono::DateTime<chrono::Utc>);
21
22impl FromSql for DateTimeColumn {
23 fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self> {
24 let raw = value.as_str()?;
25 decode_datetime(raw).map(DateTimeColumn)
26 }
27}
28
29#[derive(Debug, Clone)]
30pub struct JsonColumn(pub Value);
31
32impl FromSql for JsonColumn {
33 fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self> {
34 let raw = value.as_str()?;
35 decode_json(raw).map(JsonColumn)
36 }
37}
38
39#[derive(Debug, Clone)]
40pub struct DecimalColumn(pub cratestack_core::Decimal);
41
42impl FromSql for DecimalColumn {
43 fn column_result(value: ValueRef<'_>) -> FromSqlResult<Self> {
44 let raw = value.as_str()?;
45 decode_decimal(raw).map(DecimalColumn)
46 }
47}