5 个版本

0.1.4 2021 年 3 月 30 日
0.1.3 2021 年 3 月 18 日
0.1.2 2020 年 12 月 28 日
0.1.1 2020 年 12 月 27 日
0.1.0 2020 年 12 月 27 日

#5 in #invoice

自定义许可

50KB
1K SLoC

CI crates.io Documentation

fakturoid.cz Rust API

Rust 语言访问在线会计服务 Fakturoid 的接口。

此库由 Josef Rokos 开发和维护([email protected])。它是非官方的,不能要求 Fakturoid 团队提供支持。

功能

  • 账户详情
  • 科目:创建、更新、删除、列表、筛选和全文
  • 发票:创建、更新、删除、列表、筛选和全文、发票操作

示例

此库是异步的,因此您需要 Tokio 来执行库方法。 Cargo.toml 可能如下所示

[dependencies]
fakturoid = "0.1.4"
tokio = {version = "0.2", features = ["full"]}

获取对象详情

use fakturoid::models::Subject;
use tokio::prelude::*;
use fakturoid::client::Fakturoid;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let cli = Fakturoid::new(
        "[email protected]",
        "c08950e6s70f982dbca56295b123eff987237b9",
        "yourslug",
        Some("Rust Test API client ([email protected])")
    );

    let subject = cli.detail::<Subject>(11223344).await?;
    println!("{:?}", subject);

    Ok(())
}

更新对象

模型结构体的所有字段都具有类型 Option<...>。如果某个字段具有 None 值,则该字段将不会被序列化,因此您可以创建给定类型的新的结构体并仅设置您想要更新的字段

use fakturoid::models::Subject;
use tokio::prelude::*;
use fakturoid::client::Fakturoid;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let cli = Fakturoid::new(
        "[email protected]",
        "c08950e6s70f982dbca56295b123eff987237b9",
        "yourslug",
        Some("Rust Test API client ([email protected])")
    );

    let mut subject = Subject::default(); // initialize all fields to None
    subject.name = Some("Some other name".to_string());
    let subject = cli.update(11223344, subject).await?;
    println!("{:?}", subject);

    Ok(())
}

如果成功,将返回更新后的对象。您可以用类似的方式创建新对象

use fakturoid::models::Subject;
use tokio::prelude::*;
use fakturoid::client::Fakturoid;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let cli = Fakturoid::new(
        "[email protected]",
        "c08950e6s70f982dbca56295b123eff987237b9",
        "yourslug",
        Some("Rust Test API client ([email protected])")
    );

    let mut subject = Subject::default(); // initialize all fields to None
    subject.name = Some("Some other name".to_string()); // only mandatory fields can be set
    let subject = cli.create(11223344, subject).await?;
    println!("{:?}", subject);

    Ok(())
}

获取科目列表

Fakturoid.cz API 以每页 20 项的形式返回所有包含 20 项以上的列表。这由 PagedResponse 结构体表示。可以通过此结构体的方法访问分页

    ...
    let invoices = cli.list::<Invoice>(None).await?;
    println!("{:?}", invoices.data()[0]);
    let invoices = invoices.next_page().await?;
    ...

依赖关系

~9–13MB
~269K SLoC