libikarus 0.1.14

The core functionality of Ikarus wrapped neatly in a rust library
Documentation
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()))?,
        ))
    }
}