sqlx_d1_core/
column.rs

1use crate::type_info::D1TypeInfo;
2
3#[cfg_attr(feature = "offline", derive(serde::Serialize, serde::Deserialize))]
4pub struct D1Column {
5    pub(crate) ordinal: usize,
6    pub(crate) name: sqlx_core::ext::ustr::UStr,
7    pub(crate) type_info: D1TypeInfo,
8}
9
10impl std::fmt::Debug for D1Column {
11    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
12        f.debug_struct("D1Column")
13            .field("ordinal", &self.ordinal)
14            .field("name", &(&*self.name))
15            .finish()
16    }
17}
18
19impl sqlx_core::column::Column for D1Column {
20    type Database = crate::D1;
21
22    fn name(&self) -> &str {
23        &self.name
24    }
25
26    fn ordinal(&self) -> usize {
27        self.ordinal
28    }
29
30    fn type_info(&self) -> &<Self::Database as sqlx_core::database::Database>::TypeInfo {
31        &self.type_info
32    }
33}
34
35impl sqlx_core::column::ColumnIndex<crate::row::D1Row> for &'_ str {
36    fn index(&self, row: &crate::row::D1Row) -> Result<usize, sqlx_core::Error> {
37        use sqlx_core::row::Row as _;
38        row.columns()
39            .iter()
40            .position(|c| &*c.name == *self)
41            .ok_or_else(|| sqlx_core::Error::ColumnNotFound(self.to_string()))
42    }
43}
44impl sqlx_core::column::ColumnIndex<crate::row::D1Row> for usize {
45    fn index(&self, row: &crate::row::D1Row) -> Result<usize, sqlx_core::Error> {
46        use sqlx_core::row::Row as _;
47        (*self <= row.columns().len())
48            .then_some(*self)
49            .ok_or_else(|| sqlx_core::Error::ColumnIndexOutOfBounds {
50                index: *self,
51                len: row.columns().len()
52            })
53    }
54}
55
56#[cfg(not(target_arch = "wasm32"))]
57impl D1Column {
58    pub(crate) fn from_sqlite(sqlite_column: sqlx_sqlite::SqliteColumn) -> Self {
59        use sqlx_core::column::Column as _;
60
61        Self {
62            ordinal: sqlite_column.ordinal(),
63            name: sqlite_column.name().to_string().into(),
64            type_info: D1TypeInfo::from_sqlite(sqlite_column.type_info().clone()),
65        }
66    }
67}