cal_core/
auth.rs

1use crate::RecordReference;
2use serde::{Deserialize, Deserializer, Serialize};
3use serde_json::Value;
4
5#[derive(Serialize, Deserialize, Clone)]
6#[serde(rename_all = "camelCase")]
7pub struct Role {
8    #[serde(deserialize_with = "object_id_as_string", rename = "_id")]
9    pub id:String,
10    pub description:String,
11    pub permissions: Vec<RecordReference>
12}
13
14#[derive(Serialize, Deserialize, Clone)]
15#[serde(rename_all = "camelCase")]
16pub struct Permission {
17    #[serde(deserialize_with = "object_id_as_string", rename = "_id")]
18    pub id:String,
19    pub name:String,
20    pub description:String,
21    #[serde(rename="type")]
22    pub permission_type:String,
23}
24
25
26
27pub fn object_id_as_string<'de, D>(deserializer: D) -> Result<String, D::Error>
28where
29    D: Deserializer<'de>,
30{
31    let value = Value::deserialize(deserializer)?;
32    if value.is_string() {
33        Ok(value.as_str().unwrap().to_string())
34    } else {
35        match value.get("$oid") {
36            Some(v) => Ok(v.as_str().unwrap().to_string()),
37            None => Err(serde::de::Error::custom("Oid is required")),
38        }
39    }
40}