Compare commits

...

3 Commits

Author SHA1 Message Date
33a8ebd260 add csv module with Row struct and make_checksum fn 2026-03-03 14:12:37 -06:00
484ec6ad80 Add rand, chrono 2026-03-03 14:06:00 -06:00
f9eff0bec9 add ratatui dep 2026-03-03 13:53:09 -06:00
4 changed files with 1966 additions and 0 deletions

1888
Cargo.lock generated

File diff suppressed because it is too large Load Diff

View File

@@ -4,3 +4,6 @@ version = "0.1.0"
edition = "2024"
[dependencies]
chrono = "0.4.44"
rand = "0.10.0"
ratatui = "0.30.0"

73
src/csv.rs Normal file
View File

@@ -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<chrono::Local>,
expire: chrono::DateTime<chrono::Local>,
}
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)
}

View File

@@ -1,3 +1,5 @@
mod csv;
fn main() {
println!("Hello, world!");
}