use crate::driver::ArchiveFile; use chrono::{NaiveDate, NaiveDateTime, NaiveTime}; pub struct ZipFile { pub name: String, pub datetime: NaiveDateTime, pub compression_method: u16, pub compressed_size: u64, pub size: u64, pub comment: String, } impl ArchiveFile for ZipFile {} impl ZipFile { pub fn new( name: String, dos_date: u16, dos_time: u16, compression_method: u16, compressed_size: u64, size: u64, comment: String, ) -> Self { let year = (dos_date >> 9 & 0x7F) + 1980; let month = dos_date >> 5 & 0xF; let day = dos_date & 0x1F; let hour = (dos_time >> 11) & 0x1F; let minute = (dos_time >> 5) & 0x3F; let seconds = (dos_time & 0x1F) * 2; Self { name, datetime: NaiveDateTime::new( NaiveDate::from_ymd_opt(year as i32, month as u32, day as u32).unwrap(), NaiveTime::from_hms_opt(hour as u32, minute as u32, seconds as u32).unwrap(), ), compression_method, compressed_size, size, comment, } } }