moosicbox_yt 0.1.1

MoosicBox YouTube package
Documentation
use gimbal_database::{AsId, DatabaseValue, Row};
use moosicbox_json_utils::{
    MissingValue, ParseError, ToValueType,
    database::{AsModel, AsModelResult, ToValue},
};
use serde::{Deserialize, Serialize};

#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq, Default)]
#[serde(rename_all = "camelCase")]
pub struct YtConfig {
    pub id: u32,
    pub client_id: String,
    pub access_token: String,
    pub refresh_token: String,
    pub client_name: String,
    pub expires_in: u32,
    pub issued_at: u64,
    pub scope: String,
    pub token_type: String,
    pub user: String,
    pub user_id: u64,
    pub created: String,
    pub updated: String,
}

impl MissingValue<YtConfig> for &gimbal_database::Row {}
impl ToValueType<YtConfig> for &Row {
    fn to_value_type(self) -> Result<YtConfig, ParseError> {
        Ok(YtConfig {
            id: self.to_value("id")?,
            client_id: self.to_value("client_id")?,
            access_token: self.to_value("access_token")?,
            refresh_token: self.to_value("refresh_token")?,
            client_name: self.to_value("client_name")?,
            expires_in: self.to_value("expires_in")?,
            issued_at: self.to_value("issued_at")?,
            scope: self.to_value("scope")?,
            token_type: self.to_value("token_type")?,
            user: self.to_value("user")?,
            user_id: self.to_value("user_id")?,
            created: self.to_value("created")?,
            updated: self.to_value("updated")?,
        })
    }
}

impl AsModelResult<YtConfig, ParseError> for Row {
    fn as_model(&self) -> Result<YtConfig, ParseError> {
        self.to_value_type()
    }
}

impl AsModel<YtConfig> for Row {
    fn as_model(&self) -> YtConfig {
        AsModelResult::as_model(self).unwrap()
    }
}

impl AsId for YtConfig {
    fn as_id(&self) -> DatabaseValue {
        DatabaseValue::Number(i64::from(self.id))
    }
}