use serde::{Deserialize, Serialize};
use serde_json::{Map, Value, json};
use super::AccessType;
use super::default_access_types;
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "camelCase")]
pub struct WebDavProperties {
#[serde(
skip_serializing_if = "Vec::is_empty",
default = "default_access_types"
)]
pub access_types: Vec<AccessType>,
pub uri: String,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub shared_secret: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", default)]
pub refresh_token: Option<String>,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub permissions: Vec<WebDavPermissions>,
#[serde(skip_serializing_if = "Vec::is_empty", default)]
pub requirements: Vec<WebDavRequirements>,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum WebDavRequirements {
MustUseMfa,
MustExchangeToken,
}
#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
#[serde(rename_all = "kebab-case")]
pub enum WebDavPermissions {
Read,
Write,
Share,
}
impl TryFrom<WebDavProperties> for Map<String, Value> {
type Error = String;
fn try_from(value: WebDavProperties) -> Result<Self, Self::Error> {
let json = json!(value);
serde_json::from_value(json).map_err(|e| e.to_string())
}
}