Crate wwsvc_rs

Source
Expand description

§WEBSERVICES Client

wwsvc_rs is a web client which is used to consume SoftENGINE’s WEBSERVICES, a proprietary API for their software WEBWARE.

§Usage

Here is an example using the derive feature, which is the preferred way of using this crate.

use wwsvc_rs::{WebwareClient, Unregistered, WWSVCGetData, collection};

#[derive(WWSVCGetData, Debug, Clone, serde::Deserialize)]
#[wwsvc(function = "ARTIKEL")]
pub struct ArticleData {
    #[serde(rename = "ART_1_25")]
    pub article_number: String
}

#[tokio::main]
async fn main() {
    let client = WebwareClient::builder()
        .webware_url("https://meine-webware.de")
        .vendor_hash("my-vendor-hash")
        .app_hash("my-app-hash")
        .secret("1")
        .revision(1)
        .build();
    let mut registered_client = client.register().await.expect("failed to register");
    let articles = ArticleData::get(&mut registered_client, collection! {
        "ARTNR" => "Artikel19Prozent",
    }).await;
    println!("{:#?}", articles);

    registered_client.deregister().await.unwrap();
}

You can, however, also define your own data structures to use and reuse. For these purposes, you can directly use the client:

use reqwest::Method;
use wwsvc_rs::{collection, WebwareClient, WWSVCGetData, generate_get_response};

#[derive(Debug, serde::Deserialize, Clone)]
pub struct ArticleData {
    #[serde(rename = "ART_1_25")]
    pub article_number: String,
}

// You don't have to use this macro, it does however make generating responses a lot easier.
generate_get_response!(ArticleResponse, "ARTIKELLISTE", ArticleContainer, "ARTIKEL");

#[tokio::main]
async fn main() {
    let client = WebwareClient::builder()
        .webware_url("https://meine-webware.de")
        .vendor_hash("my-vendor-hash")
        .app_hash("my-app-hash")
        .secret("1")
        .revision(1)
        .build();
    let mut registered_client = client.register().await.expect("failed to register");

    let articles = registered_client.request_generic::<ArticleResponse<ArticleData>>(Method::PUT, "ARTIKEL.GET", 1, collection! {
        "ARTNR" => "Artikel19Prozent",
    }, None)
        .await
        .unwrap();

    println!("{:#?}", articles.container.list.unwrap());

    registered_client.deregister().await.unwrap();
}

Re-exports§

pub use app_hash::AppHash;
pub use cursor::Cursor;
pub use traits::WWSVCGetData;
pub use client::WebwareClient;
pub use error::WWSVCError;
pub use futures;
pub use client::states::*;

Modules§

app_hash
Module containing the app hash, which is needed for each request.
client
Module containing the client.
cursor
Module containing the pagination cursor.
error
Module containing the error type.
macros
Module containing the macros.
responses
Module containing common response types.
traits
Module containing trais.

Macros§

collection
Generates a collection with syntactic sugar for vecs, sets and maps.
generate_get_response
Generates a response struct with a container struct.

Structs§

Credentials
Credentials for the client.
Method
The Request Method (VERB)
Response
A Response to a submitted Request.

Enums§

Value
Represents any valid JSON value.

Type Aliases§

WWClientResult
Result type for the wwsvc-rs crate.

Attribute Macros§

async_trait

Derive Macros§

WWSVCGetData
Generates a response and a container struct based on the name of the struct and the function name.