use serde::{Deserialize, Serialize};
use crate::{
deserializers::{
default_false, default_sap_content_version, default_true, edm_string::to_bool,
},
xml::{
default_xml_language, default_xml_namespace_app, default_xml_namespace_atom,
default_xml_namespace_m, default_xml_namespace_sap,
},
};
pub mod feed;
#[derive(Debug, Serialize, Deserialize)]
pub struct AtomLink {
#[serde(rename = "@atom", default = "default_xml_namespace_atom")]
pub xml_namespace_atom: Option<String>,
#[serde(rename = "@type")]
pub mime_type: Option<String>,
#[serde(rename = "@rel")]
pub rel: String,
#[serde(rename = "@href")]
pub href: String,
#[serde(rename = "@title")]
pub title: Option<String>,
}
impl std::str::FromStr for AtomLink {
type Err = quick_xml::DeError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
quick_xml::de::from_str(s)
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AtomCollection {
#[serde(
rename = "@creatable",
deserialize_with = "to_bool",
default = "default_true"
)]
pub is_creatable: bool,
#[serde(
rename = "@updatable",
deserialize_with = "to_bool",
default = "default_true"
)]
pub is_updatable: bool,
#[serde(
rename = "@deletable",
deserialize_with = "to_bool",
default = "default_true"
)]
pub is_deletable: bool,
#[serde(
rename = "@pageable",
deserialize_with = "to_bool",
default = "default_true"
)]
pub is_pageable: bool,
#[serde(
rename = "@searchable",
deserialize_with = "to_bool",
default = "default_false"
)]
pub is_searchable: bool,
#[serde(rename = "@content-version", default = "default_sap_content_version")]
pub content_version: String,
#[serde(rename = "@href")]
pub href: String,
pub title: String,
#[serde(rename = "member-title")]
pub member_title: String,
pub link: Option<AtomLink>,
}
impl std::str::FromStr for AtomCollection {
type Err = quick_xml::DeError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
quick_xml::de::from_str(s)
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AtomWorkspace {
pub title: String,
#[serde(rename = "collection")]
pub collections: Vec<AtomCollection>,
}
impl std::str::FromStr for AtomWorkspace {
type Err = quick_xml::DeError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
quick_xml::de::from_str(s)
}
}
#[derive(Debug, Serialize, Deserialize)]
pub struct AtomService {
#[serde(rename = "@xmlns:app", default = "default_xml_namespace_app")]
pub namespace_app: String,
#[serde(rename = "@xmlns:atom", default = "default_xml_namespace_atom")]
pub namespace_atom: Option<String>,
#[serde(rename = "@xmlns:m", default = "default_xml_namespace_m")]
pub namespace_m: String,
#[serde(rename = "@xmlns:sap", default = "default_xml_namespace_sap")]
pub namespace_sap: String,
#[serde(rename = "@lang", default = "default_xml_language")]
pub language: String,
#[serde(rename = "@base")]
pub base_url: String,
pub workspace: AtomWorkspace,
#[serde(rename = "link")]
pub links: Vec<AtomLink>,
}
impl std::str::FromStr for AtomService {
type Err = quick_xml::DeError;
fn from_str(s: &str) -> Result<Self, Self::Err> {
quick_xml::de::from_str(s)
}
}
#[cfg(test)]
pub mod unit_tests;