use serde::{Deserialize, Serialize};
#[derive(Serialize)]
pub struct NewDocResponse {
#[serde(rename = "docId")]
pub doc_id: String,
}
#[derive(Copy, Clone, Serialize, Deserialize, PartialEq)]
pub enum Authorization {
#[serde(rename = "read-only")]
ReadOnly,
#[serde(rename = "full")]
Full,
#[serde(rename = "none")]
None,
}
impl Authorization {
fn full() -> Self {
Self::Full
}
}
#[derive(Deserialize)]
pub struct AuthDocRequest {
#[serde(default = "Authorization::full")]
pub authorization: Authorization,
#[serde(rename = "userId")]
pub user_id: Option<String>,
#[serde(skip_serializing_if = "Option::is_none", rename = "validForSeconds")]
pub valid_for_seconds: Option<u64>,
}
impl Default for AuthDocRequest {
fn default() -> Self {
Self {
authorization: Authorization::Full,
user_id: None,
valid_for_seconds: None,
}
}
}
#[derive(Serialize, Deserialize)]
pub struct ClientToken {
pub url: String,
#[serde(rename = "baseUrl")]
pub base_url: Option<String>,
#[serde(rename = "docId")]
pub doc_id: String,
#[serde(skip_serializing_if = "Option::is_none")]
pub token: Option<String>,
#[serde(rename = "authorization")]
pub authorization: Authorization,
}
#[derive(Deserialize, Debug)]
pub struct DocCreationRequest {
#[serde(skip_serializing_if = "Option::is_none", rename = "docId")]
pub doc_id: Option<String>,
}
pub fn validate_doc_name(doc_name: &str) -> bool {
if doc_name.is_empty() {
return false;
}
for c in doc_name.chars() {
if !c.is_ascii_alphanumeric() && c != '-' && c != '_' {
return false;
}
}
true
}