drizzle_sqlite/values/owned/
mod.rs1mod conversions;
4mod drivers;
5
6use super::SQLiteValue;
7use crate::traits::FromSQLiteValue;
8use drizzle_core::{error::DrizzleError, sql::SQL, traits::SQLParam};
9use std::borrow::Cow;
10
11#[derive(Debug, Clone, PartialEq, PartialOrd, Default)]
13pub enum OwnedSQLiteValue {
14 Integer(i64),
16 Real(f64),
18 Text(String),
20 Blob(Box<[u8]>),
22 #[default]
24 Null,
25}
26
27impl OwnedSQLiteValue {
28 #[inline]
30 pub const fn is_null(&self) -> bool {
31 matches!(self, OwnedSQLiteValue::Null)
32 }
33
34 #[inline]
36 pub const fn as_i64(&self) -> Option<i64> {
37 match self {
38 OwnedSQLiteValue::Integer(value) => Some(*value),
39 _ => None,
40 }
41 }
42
43 #[inline]
45 pub const fn as_f64(&self) -> Option<f64> {
46 match self {
47 OwnedSQLiteValue::Real(value) => Some(*value),
48 _ => None,
49 }
50 }
51
52 #[inline]
54 pub fn as_str(&self) -> Option<&str> {
55 match self {
56 OwnedSQLiteValue::Text(value) => Some(value.as_str()),
57 _ => None,
58 }
59 }
60
61 #[inline]
63 pub fn as_bytes(&self) -> Option<&[u8]> {
64 match self {
65 OwnedSQLiteValue::Blob(value) => Some(value.as_ref()),
66 _ => None,
67 }
68 }
69
70 #[inline]
72 pub fn as_value(&self) -> SQLiteValue<'_> {
73 match self {
74 OwnedSQLiteValue::Integer(value) => SQLiteValue::Integer(*value),
75 OwnedSQLiteValue::Real(value) => SQLiteValue::Real(*value),
76 OwnedSQLiteValue::Text(value) => SQLiteValue::Text(Cow::Borrowed(value)),
77 OwnedSQLiteValue::Blob(value) => SQLiteValue::Blob(Cow::Borrowed(value)),
78 OwnedSQLiteValue::Null => SQLiteValue::Null,
79 }
80 }
81
82 pub fn convert<T: FromSQLiteValue>(self) -> Result<T, DrizzleError> {
87 match self {
88 OwnedSQLiteValue::Integer(i) => T::from_sqlite_integer(i),
89 OwnedSQLiteValue::Text(s) => T::from_sqlite_text(&s),
90 OwnedSQLiteValue::Real(r) => T::from_sqlite_real(r),
91 OwnedSQLiteValue::Blob(b) => T::from_sqlite_blob(&b),
92 OwnedSQLiteValue::Null => T::from_sqlite_null(),
93 }
94 }
95
96 pub fn convert_ref<T: FromSQLiteValue>(&self) -> Result<T, DrizzleError> {
98 match self {
99 OwnedSQLiteValue::Integer(i) => T::from_sqlite_integer(*i),
100 OwnedSQLiteValue::Text(s) => T::from_sqlite_text(s),
101 OwnedSQLiteValue::Real(r) => T::from_sqlite_real(*r),
102 OwnedSQLiteValue::Blob(b) => T::from_sqlite_blob(b),
103 OwnedSQLiteValue::Null => T::from_sqlite_null(),
104 }
105 }
106}
107
108impl std::fmt::Display for OwnedSQLiteValue {
109 fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
110 let value = match self {
111 OwnedSQLiteValue::Integer(i) => i.to_string(),
112 OwnedSQLiteValue::Real(r) => r.to_string(),
113 OwnedSQLiteValue::Text(s) => s.clone(),
114 OwnedSQLiteValue::Blob(b) => String::from_utf8_lossy(b).to_string(),
115 OwnedSQLiteValue::Null => String::new(),
116 };
117 write!(f, "{value}")
118 }
119}
120
121impl<'a> From<SQLiteValue<'a>> for OwnedSQLiteValue {
126 fn from(value: SQLiteValue<'a>) -> Self {
127 match value {
128 SQLiteValue::Integer(i) => Self::Integer(i),
129 SQLiteValue::Real(r) => Self::Real(r),
130 SQLiteValue::Text(cow) => Self::Text(cow.into_owned()),
131 SQLiteValue::Blob(cow) => Self::Blob(cow.into_owned().into_boxed_slice()),
132 SQLiteValue::Null => Self::Null,
133 }
134 }
135}
136
137impl<'a> From<&SQLiteValue<'a>> for OwnedSQLiteValue {
138 fn from(value: &SQLiteValue<'a>) -> Self {
139 match value {
140 SQLiteValue::Integer(i) => Self::Integer(*i),
141 SQLiteValue::Real(r) => Self::Real(*r),
142 SQLiteValue::Text(cow) => Self::Text(cow.clone().into_owned()),
143 SQLiteValue::Blob(cow) => Self::Blob(cow.clone().into_owned().into_boxed_slice()),
144 SQLiteValue::Null => Self::Null,
145 }
146 }
147}
148
149impl SQLParam for OwnedSQLiteValue {}
154
155impl<'a> From<OwnedSQLiteValue> for SQL<'a, OwnedSQLiteValue> {
156 fn from(value: OwnedSQLiteValue) -> Self {
157 SQL::param(value)
158 }
159}
160
161impl From<OwnedSQLiteValue> for Cow<'_, OwnedSQLiteValue> {
166 fn from(value: OwnedSQLiteValue) -> Self {
167 Cow::Owned(value)
168 }
169}
170
171impl<'a> From<&'a OwnedSQLiteValue> for Cow<'a, OwnedSQLiteValue> {
172 fn from(value: &'a OwnedSQLiteValue) -> Self {
173 Cow::Borrowed(value)
174 }
175}