use serde::{Deserialize, Serialize};
use crate::B64Url;
#[cfg(doc)]
use crate::{Account, Collection, Item};
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
pub struct SharedExtension {
pub accessors: Vec<SharingAccessor>,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct SharingAccessor {
#[serde(rename = "type")]
pub ty: SharingAccessorType,
pub account_id: B64Url,
pub name: String,
pub permissions: Vec<SharingAccessorPermission>,
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
#[serde(rename_all = "lowercase")]
#[non_exhaustive]
pub enum SharingAccessorType {
User,
Group,
#[serde(untagged)]
Unknown(String),
}
#[derive(Debug, Serialize, Deserialize, Clone, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
#[non_exhaustive]
pub enum SharingAccessorPermission {
Read,
ReadSecret,
Update,
Create,
Delete,
Share,
Manage,
#[serde(untagged)]
Unknown(String),
}