## Example Usage
You want to develop a Rust application that can consume the entity sets exposed by an SAP V2 OData service.
For the purposes of instruction, let's say you're working with a custom OData service that displays services ordered either by functional location or by date:
| | |
|--------------------|---------------------------------------------------------|
| Rust Application | `zcustom-service-orders` |
| OData Service URL | `https://my-sap-server.my-domain.com/sap/opu/odata/sap` |
| OData Service Name | `ZCUSTOM_SERVICE_ORDERS_SRV` |
| OData Schema Name | `ZCUSTOM_SERVICE_ORDERS` |
| Entity Names | `SERVICE_ORDERS_BY_FLOC`
`SERVICE_ORDERS_BY_DATE` |
| Entity Type | `ZServiceOrder` |
The general approach to consuming such a service is as follows:
1. Create a new Rust binary application `cargo new zcustom-service-orders`
1. `cd zcustom-service-orders`
1. Edit `Cargo.toml` to include at least the following dependencies
```toml
[build-dependencies]
parse-sap-odata = { version = "1.4", features = ["parser"]}
[dependencies]
# Dependencies needed by the code generated by parse-sap-odata
chrono = { version = "0.4", features = ["serde"]}
quick-xml = { version = "0.36", features = ["serialize"] }
rust_decimal = { version = "1", features = ["serde-with-str"]}
serde = { version = "1.0", features = ["derive"] }
uuid = { version = "1.8", features = ["serde"]}
# Dependencies needed by this app
parse-sap-odata = "1.4"
parse-sap-atom-feed = "1.1"
```
1. `mkdir odata`
1. In your browser, visit your OData service's metadata
E.G. `https://my-sap-server.my-domain.com/sap/opu/odata/sap/ZCUSTOM_SERVICE_ORDERS_SRV/$metadata`
1. Save the metadata as the file `zcustom_service_orders.xml` in the `odata` directory
1. Create a `build.rs` file in same directory as `Cargo.toml` and add at least the following:
```rust
use parse_sap_odata::parser::gen_src;
fn main() {
gen_src("zcustom_service_orders", "ZCUSTOM_SERVICE_ORDERS");
}
```
1. In `src/main.rs` include at least:
```rust
use parse_sap_atom_feed::{atom::feed::Feed, odata_error::ODataError, xml::sanitise_xml};
use std::str::{self, FromStr};
include!(concat!(env!("OUT_DIR"), "/zcustom_service_orders.rs"));
use zcustom_service_orders::*;
fn main() {
let raw_xml: String = /* Whatever code is needed to fetch the entity set data as a raw XML string */
// You might need to sanitise the raw XML string before attempting to parse it
let clean_xml = sanitise_xml(raw_xml);
let srv_orders_by_floc = Feed::::from_str(&clean_xml);
}
```