pub mod number_settings;
pub mod text_settings;
pub mod toggle_settings;
use crate::objects::property_settings::number_settings::NumberSettings;
use crate::objects::property_settings::text_settings::TextSettings;
use crate::objects::property_settings::toggle_settings::ToggleSettings;
use serde_derive::{Deserialize, Serialize};
use sqrite::sql_interface::{FromSql, FromSqlError, ToSql, ToSqlError};
use sqrite::value::Value;
use std::fmt::Formatter;
#[derive(Debug, Clone, Deserialize, Serialize, Ord, PartialOrd, Eq, PartialEq)]
pub enum PropertySettings {
Toggle(ToggleSettings),
Number(NumberSettings),
Text(TextSettings),
}
impl std::fmt::Display for PropertySettings {
fn fmt(&self, f: &mut Formatter<'_>) -> std::fmt::Result {
write!(f, "{:?}", self)
}
}
impl FromSql for PropertySettings {
fn from_sql(value: Value) -> Result<Self, FromSqlError> {
match value {
Value::TextRef(v) => {
Ok(serde_json::from_str(v).map_err(|e| FromSqlError::Custom(e.to_string()))?)
}
Value::Text(v) => {
Ok(serde_json::from_str(&v).map_err(|e| FromSqlError::Custom(e.to_string()))?)
}
_ => Err(FromSqlError::UnexpectedType),
}
}
}
impl ToSql for PropertySettings {
fn to_sql(&self) -> Result<Value, ToSqlError> {
Ok(Value::Text(
serde_json::to_string(self).map_err(|e| ToSqlError::Custom(e.to_string()))?,
))
}
}