9 个版本

新版本 0.3.2 2024年8月21日
0.3.1 2024年2月14日
0.2.2 2022年7月1日
0.2.1 2022年6月10日
0.1.2 2022年2月28日

1327网络编程

Download history 8/week @ 2024-05-24 2/week @ 2024-05-31 3/week @ 2024-06-28 24/week @ 2024-07-05 2/week @ 2024-07-19 22/week @ 2024-07-26 111/week @ 2024-08-16

134 每月下载量

自定义许可证

89KB
2K SLoC

SIP2 Rust 库

Rust SIP2 客户端库

API 文档

https://kcls.github.io/evergreen-universe-rs/sip2/index.html

两种操作模式

连接API

  • 支持完整的SIP2规范
  • 允许对每个固定字段和字段值进行完全控制。
  • 优雅地处理未知/自定义消息字段。

客户端API

  • 位于连接API之上,并为常见任务提供预定义操作。
  • 客户端方法允许调用者使用最少参数发送消息,而无需手动创建消息。

运行CLI

cargo run --bin sip2-client-cli -- --sip-user sip-user  \
    --sip-pass sip-pass                                 \
    --item-barcode 30000017113634                       \
    --patron-barcode 394902                             \
    --message-type item-information                     \
    --message-type patron-status                        \
    --message-type patron-information

连接API示例

连接API规范构建

use sip2::*;

let host = "localhost:6001";
let user = "sip-user";
let pass = "sip-pass";

let con = Connection::new(host).unwrap();

let req = Message::new(
    &spec::M_LOGIN,
    vec![
        FixedField::new(&spec::FF_UID_ALGO, "0").unwrap(),
        FixedField::new(&spec::FF_PWD_ALGO, "0").unwrap(),
    ],
    vec![
        Field::new(spec::F_LOGIN_UID.code, user),
        Field::new(spec::F_LOGIN_PWD.code, pass),
    ]
).expect("Message Has Valid Content");

let resp = con.sendrecv(&req).unwrap();

println!("Received: {}", resp);

// Verify the response reports a successful login
if resp.spec().code == spec::M_LOGIN_RESP.code
    && resp.fixed_fields().len() == 1
    && resp.fixed_fields()[0].value() == "1" {

    println!("Login OK");

} else {

    println!("Login Failed");
}

连接API自由文本消息构建

let req = Message::from_values(
    &spec::M_LOGIN,
    &["0", "0"],
    &[("CN", "sip-username"), ("CO", "sip-password")]
).expect("Message Has Valid Content");

客户端API示例

use sip2::*;

let host = "localhost:6001";
let user = "sip-user";
let pass = "sip-pass";

let mut client = Client::new(host).unwrap();

let params = ParamSet::new();
params.set_sip_user(user);
params.set_sip_pass(pass);

let resp = client.login(&params).unwrap();

prinln!("Received: {}", resp.msg());

match resp.ok() {
    true => println!("Login OK"),
    false => eprintln!("Login Failed"),
}

依赖项

~2MB
~23K SLoC