parse_sap_odata/edmx/
mod.rs

1pub mod data_services;
2pub mod reference;
3
4use serde::{Deserialize, Serialize};
5
6use data_services::DataServices;
7use reference::Reference;
8
9use crate::xml::{default_xml_namespace_edmx, default_xml_namespace_m, default_xml_namespace_sap};
10
11#[derive(Debug, Serialize, Deserialize)]
12pub enum EdmxVersion {
13    #[serde(rename = "1.0")]
14    V1_0,
15    #[serde(rename = "2.0")]
16    V2_0,
17}
18
19// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
20/// Represents the top-level Entity Data Model, or `<edmx:Edmx>` tag in an OData metadata document
21///
22/// # Child Nodes
23/// `0:n edmx:Reference`<br>
24/// `1:1 edmx:DataServices`
25///
26/// ***WARNING:***<br>`quick-xml` strips the namespace from XML tag names, but not attribute names!
27///
28/// Consequently, tag names such as `<edmx:DataServices>` and `<atom:link>` will appear simply as `<DataServices>` and
29/// `<link>` etc, but attribute names such as `sap:schema-version` will appear without modification
30#[derive(Debug, Serialize, Deserialize)]
31#[serde(rename_all = "PascalCase")]
32pub struct Edmx {
33    #[serde(rename = "@Version")]
34    pub version: EdmxVersion,
35    #[serde(rename = "@xmlns:edmx", default = "default_xml_namespace_edmx")]
36    pub namespace_edmx: String,
37    #[serde(rename = "@xmlns:m", default = "default_xml_namespace_m")]
38    pub namespace_m: String,
39    #[serde(rename = "@xmlns:sap", default = "default_xml_namespace_sap")]
40    pub namespace_sap: String,
41    #[serde(rename = "Reference")]
42    pub references: Option<Vec<Reference>>,
43    pub data_services: DataServices,
44}
45
46impl std::str::FromStr for Edmx {
47    type Err = quick_xml::DeError;
48
49    fn from_str(s: &str) -> Result<Self, Self::Err> {
50        quick_xml::de::from_str(s)
51    }
52}