From 33a8ebd260ba0b31ed1f07f386d928d4c6b0724a Mon Sep 17 00:00:00 2001 From: Shea Frembling Date: Tue, 3 Mar 2026 14:05:51 -0600 Subject: [PATCH] add csv module with Row struct and make_checksum fn --- src/csv.rs | 73 +++++++++++++++++++++++++++++++++++++++++++++++++++++ src/main.rs | 2 ++ 2 files changed, 75 insertions(+) create mode 100644 src/csv.rs diff --git a/src/csv.rs b/src/csv.rs new file mode 100644 index 0000000..194f7d5 --- /dev/null +++ b/src/csv.rs @@ -0,0 +1,73 @@ +pub struct Row { + name: String, + hut_type: String, + path: String, + tare: f64, + mat_id: String, + quantity: f64, + lot_id: String, + uom: String, + lot_status: String, + born: chrono::DateTime, + expire: chrono::DateTime, +} + +impl Row { + pub fn new( + name: &str, + hut_type: &str, + path: &str, + tare: f64, + mat_id: &str, + quantity: f64, + uom: &str, + lot_status: &str, + checksum: bool, + ) -> Self { + let born = chrono::Local::now(); + let expire = born + .checked_add_days(chrono::Days::new(365)) + .expect("A valid date time"); + let name = match checksum { + true => make_checksum(), + false => name.to_ascii_uppercase(), + }; + Self { + name: name.clone(), + hut_type: hut_type.to_ascii_uppercase(), + path: path.to_ascii_uppercase(), + tare, + mat_id: mat_id.to_ascii_uppercase(), + quantity, + lot_id: format!("{}-{}", name, mat_id).to_ascii_uppercase(), + uom: uom.to_ascii_uppercase(), + lot_status: lot_status.to_ascii_uppercase(), + born, + expire, + } + } +} + +fn make_checksum() -> String { + let base = rand::random_range(10000..99999).to_string(); + let expect = "a valid character in the base checksum"; + + let split = format!( + "{}{}{}{}{}", + base.chars().next().expect(expect), + base.chars().nth(2).expect(expect), + base.chars().nth(4).expect(expect), + base.chars().nth(1).expect(expect), + base.chars().nth(3).expect(expect) + ) + .repeat(2); + + let sum: u32 = split + .chars() + .map(|c| c.to_digit(10).expect("a valid integer value")) + .sum(); + + let last = (10 - (sum % 10)) % 10; + + format!("{}{}", base, last) +} diff --git a/src/main.rs b/src/main.rs index e7a11a9..99c5e26 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,3 +1,5 @@ +mod csv; + fn main() { println!("Hello, world!"); }