9 releases
0.3.2 | Aug 21, 2024 |
---|---|
0.3.1 | Feb 14, 2024 |
0.2.2 | Jul 1, 2022 |
0.2.1 | Jun 10, 2022 |
0.1.2 | Feb 28, 2022 |
#1041 in Network programming
89KB
2K
SLoC
SIP2 Rust Library
Rust SIP2 Client Library
API Docs
https://kcls.github.io/evergreen-universe-rs/sip2/index.html
Two Modes of Operation
Connection API
- Supports the full SIP2 specification
- Allows complete control over every fixed field and field value.
- Gracefully handles unknown / custom message fields.
Client API
- Sits atop the Connection API and provides canned actions for common tasks.
- Client methods allow the caller to send messages using a minimal number of parameters without having to create the message by hand.
Running the 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
Connection API Examples
Connection API Spec Building
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");
}
Connection API Free-Text Message Building
let req = Message::from_values(
&spec::M_LOGIN,
&["0", "0"],
&[("CN", "sip-username"), ("CO", "sip-password")]
).expect("Message Has Valid Content");
Client API example
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(¶ms).unwrap();
prinln!("Received: {}", resp.msg());
match resp.ok() {
true => println!("Login OK"),
false => eprintln!("Login Failed"),
}
Dependencies
~3MB
~41K SLoC