41 stable releases
1.4.9 | Sep 17, 2024 |
---|---|
1.4.6 | Aug 30, 2024 |
1.2.5 | Jun 12, 2024 |
1.2.3 | Oct 5, 2023 |
1.0.0 | Jun 1, 2023 |
#666 in Parser implementations
2,338 downloads per month
2.5MB
4.5K
SLoC
Parse the Metadata from an SAP OData V2 Service
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
.
Generated Modules
OData Service Document Module
-
The metadata description of the OData service is used to declare for all the
struct
s andenum
s 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 aVec
of that generatedstruct
.-
Edm.DateTime
fields are transformed intochrono::NaiveDateTime
using a custom deserializer. -
Edm.Decimal
fields transformed intorust_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 thePrecision
property) is ignored asrust_decimal::Decimal
values use a hard-coded precision of 64.
-
-
The generated module declares external crate dependencies on
quick_xml
andserde
and possibly also onchrono
,rust_decimal
anduuid
depending on whetherEdm.DateTime
,Edm.Decimal
orEdm.Guid
properties are encountered.
OData Service Metadata Module
-
For each
EntityType
occurring in the metadata:- A
struct
is created using theEntityType
's name followed byMetadata
. E.G.<EntityType Name="BusinessPartner">
generatespub struct BusinessPartnerMetadata
- An implementation is created containing a
key()
function and getter function for eachstruct
property that returns an instance of aProperty
object.
- A
-
The
Name
property of each<Association>
metadata tag is stripped of theAssoc_
prefix and added as a member to the Associationsenum
. -
The
Name
property of each<AssociationSet>
metadata tag is stripped of theAssoc_
prefix and the_AssocSet
suffix and added as a member to the AssociationSetsenum
. -
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
.
Table of Contents
Change Log
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-feed Gate 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 Association s and AssociationSet s |
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 |
Dependencies
~8–18MB
~264K SLoC