13 个版本 (6 个稳定版)

3.1.4 2024年3月25日
3.1.2 2024年3月20日
3.0.0-pre.202024年1月22日
3.0.0-pre.182023年6月15日

#24 in #web-client

Download history 75/week @ 2024-04-26 4/week @ 2024-05-03 5/week @ 2024-05-31 2/week @ 2024-06-07 3/week @ 2024-06-28 4/week @ 2024-07-05 4/week @ 2024-07-12 2/week @ 2024-07-19 153/week @ 2024-07-26

每月下载量 164
2 个 crate 中使用 (via wwsvc-rs)

MIT 协议

7KB
125

wwsvc-rs

crate-badge docs-badge

一个用于消费 SoftENGINE 的 WEBSERVICES(他们 ERPSuite 的专有 API)的 Web 客户端。

使用方法

以下是一个使用 derive 功能的示例,这是使用此 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();
}

然而,您也可以定义自己的数据结构来使用和重用。为此,您可以直接使用客户端

use reqwest::Method;
use wwsvc_rs::{collection, 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();
}

安全性

此项目使用 #![forbid(unsafe_code)] 确保所有内容都在 100% 安全的 Rust 中实现。

版本控制

此项目遵循 语义化版本控制


lib.rs:

wwsvc-rs-derive

这是一组从 wwsvc-rs 推导特质的宏。

依赖关系

~0.6–1MB
~24K SLoC