nigig-org/nimanyatta/crates/kra-etims-sdk/examples/basic_usage.rs
andodeki fd8b0632ca
Some checks failed
repo hygiene / hygiene (push) Has been cancelled
Include nimanyatta as normal tree (not embedded git)
2026-09-26 09:29:36 +03:00

96 lines
No EOL
2.6 KiB
Rust

//! Demonstrates using the SDK as a library (no server).
use kra_etims_sdk::{
models::{
auth::AuthRequest,
basic_data::CodeListRequest,
initialization::InitOsdcInfoRequest,
sales::{SalesTrnsItem, SendSalesTrnsRequest},
},
KRAeTimsSDK,
};
#[tokio::main]
async fn main() {
dotenvy::dotenv().ok();
kra_etims_sdk::logger::init();
let sdk = KRAeTimsSDK::new().expect("SDK initialisation failed");
// 1. Authenticate
println!("▸ Authenticating…");
let auth = sdk
.auth
.get_token(AuthRequest {
username: std::env::var("API_USERNAME").unwrap(),
password: std::env::var("API_PASSWORD").unwrap(),
})
.await;
match &auth {
Ok(r) => println!(" ✓ token obtained, expires at {}", r.data.expires_at),
Err(e) => {
eprintln!(" ✗ {e}");
return;
}
}
// 2. Initialise OSDC
println!("▸ Initialising OSDC Info…");
match sdk
.initialization
.select_init_osdc_info(InitOsdcInfoRequest {
tin: "P000000045R".into(),
bhf_id: "00".into(),
dvc_srl_no: "MOVA22".into(),
})
.await
{
Ok(r) => println!(" ✓ {}", serde_json::to_string_pretty(&r).unwrap()),
Err(e) => eprintln!(" ✗ {e}"),
}
// 3. Code list
println!("▸ Fetching code list…");
match sdk
.basic_data
.select_code_list(CodeListRequest {
tin: "P000000045R".into(),
bhf_id: "00".into(),
last_req_dt: "20220101010101".into(),
cmc_key: None,
})
.await
{
Ok(r) => println!(" ✓ {}", serde_json::to_string_pretty(&r).unwrap()),
Err(e) => eprintln!(" ✗ {e}"),
}
// 4. Sales transaction
println!("▸ Sending sales transaction…");
match sdk
.sales
.send_sales_trns(SendSalesTrnsRequest {
tin: "P000000045R".into(),
bhf_id: "00".into(),
invc_no: "INV001".into(),
sales_trns_items: vec![SalesTrnsItem {
item_cd: "ITEM001".into(),
item_nm: "Test Item".into(),
qty: 1.0,
prc: 100.0,
sply_amt: 100.0,
dc_rt: None,
dc_amt: None,
tax_ty_cd: "V".into(),
tax_amt: 16.0,
}],
cmc_key: None,
})
.await
{
Ok(r) => println!(" ✓ {}", serde_json::to_string_pretty(&r).unwrap()),
Err(e) => eprintln!(" ✗ {e}"),
}
println!("Done.");
}