cal-core 0.2.158

Callable core lib
Documentation
// Filename cal-core/src/auth.rs

use crate::RecordReference;
use serde::{Deserialize, Deserializer, Serialize};
use serde_json::Value;

#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Role {
    #[serde(deserialize_with = "object_id_as_string", rename = "_id")]
    pub id:String,
    pub description:String,
    pub permissions: Vec<RecordReference>
}

#[derive(Serialize, Deserialize, Clone)]
#[serde(rename_all = "camelCase")]
pub struct Permission {
    #[serde(deserialize_with = "object_id_as_string", rename = "_id")]
    pub id:String,
    pub name:String,
    pub description:String,
    #[serde(rename="type")]
    pub permission_type:String,
}



pub fn object_id_as_string<'de, D>(deserializer: D) -> Result<String, D::Error>
where
    D: Deserializer<'de>,
{
    let value = Value::deserialize(deserializer)?;
    if value.is_string() {
        Ok(value.as_str().unwrap().to_string())
    } else {
        match value.get("$oid") {
            Some(v) => Ok(v.as_str().unwrap().to_string()),
            None => Err(serde::de::Error::custom("Oid is required")),
        }
    }
}