//! 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."); }