| Crates.io | parse-sap-odata |
| lib.rs | parse-sap-odata |
| version | 1.4.9 |
| created_at | 2023-06-01 14:33:38.437732+00 |
| updated_at | 2024-09-17 17:36:39.870257+00 |
| description | Generate a pair of Rust modules from SAP V2 OData metadata |
| homepage | |
| repository | https://github.com/ChrisWhealy/parse-sap-odata |
| max_upload_size | |
| id | 879793 |
| size | 2,877,687 |
Parses the metadata XML describing an SAP OData V2 service and generates two Rust modules: one for the Service Document and one for the metadata document.
The code generated by this crate is designed to work in conjunction with the crate parse-sap-atom-feed.
The metadata description of the OData service is used to declare for all the structs and enums needed to interact with your chosen OData service.
For each OData Collection, a Rust struct is generated to represent a row of that collection, then the entire collection is represented as a Vec of that generated struct.
Edm.DateTime fields are transformed into chrono::NaiveDateTime using a custom deserializer.
Edm.Decimal fields transformed into rust_decimal::Decimal
However, this transformation can only account for the declared number of decimal places (defined by the Scale property).
The number of decimal digits (defined by the Precision property) is ignored as rust_decimal::Decimal values use a hard-coded precision of 64.
The generated module declares external crate dependencies on quick_xml and serde and possibly also on chrono, rust_decimal and uuid depending on whether Edm.DateTime, Edm.Decimal or Edm.Guid properties are encountered.
For each EntityType occurring in the metadata:
struct is created using the EntityType's name followed by Metadata.
E.G. <EntityType Name="BusinessPartner"> generates pub struct BusinessPartnerMetadatakey() function and getter function for each struct property that returns an instance of a Property object.The Name property of each <Association> metadata tag is stripped of the Assoc_ prefix and added as a member to the Associations enum.
The Name property of each <AssociationSet> metadata tag is stripped of the Assoc_ prefix and the _AssocSet suffix and added as a member to the AssociationSets enum.
For each <Association> or <AssociationSet> enum, there is an implementation containing a getter function for each Association(Set).
The generated module declares an external crate dependency on parse_sap_atom_feed.
| Version | Task | Description |
|---|---|---|
| 1.4.9 | Feature | Add convenience macro include_mod!() |
| 1.4.8 | Fix | Handle possible external crate dependency on uuid |
| 1.4.7 | Chore | Add categories to Cargo.toml |
| 1.4.6 | Chore | Bump version of parse-sap-atom-feed dependency |
| 1.4.5 | Fix | Correct failing test |
| 1.4.4 | Fix | Split declaration of external crate dependencies into known and dynamically derived |
| 1.4.3 | Fix | Add declarations for external crate dependencies |
| 1.4.2 | Fix | Depend on AtomLink definition in parse-sap-atom-feedGate call to rustfmt behind parser feature |
| 1.4.1 | Fix | Remove duplicate code and update docs |
| 1.4.0 | Feature | Generate code to use custom rust_decimal::Decimal parser in parse-sap-atom-feed |
| 1.3.6 | Chore | Refactor parser generation code |
| 1.3.5 | Fix | Correct use declaration for feature |
| 1.3.4 | Chore | Improve and expand tests |
| 1.3.3 | Chore | Internal refactoring to improve architectural consistency |
| 1.3.2 | Feature | Generate metadata for Associations and AssociationSets |
| 1.3.1 | Chore | Internal optimisation and refactoring. No changes to functionality |
| 1.3.0 | Feature | Generate a metadata module |
| 1.2.5 | Chore | Update Cargo.toml dependency versions |
| 1.2.4 | Feature | Add get_key() function to EntityType trait |