use rusqlite::types::Value;
use serde::{Deserialize, Deserializer, Serializer};
#[derive(Serialize, Deserialize)]
#[serde(remote = "Value")]
pub enum ValueDef {
Null,
Integer(i64),
Real(f64),
Text(String),
Blob(Vec<u8>),
}
pub fn serialize<S>(array: &[Value], serializer: S) -> Result<S::Ok, S::Error>
where
S: Serializer,
{
#[derive(Serialize)]
struct W<'a>(#[serde(with = "ValueDef")] &'a Value);
let values = array.iter().map(|value| W(value));
serializer.collect_seq(values)
}
pub fn deserialize<'de, D>(deserializer: D) -> Result<Vec<Value>, D::Error>
where
D: Deserializer<'de>,
{
#[derive(Deserialize)]
struct W(#[serde(with = "ValueDef")] Value);
let values = Vec::<W>::deserialize(deserializer)?;
Ok(values.into_iter().map(|w_value| w_value.0).collect())
}