This commit is contained in:
Bel LaPointe
2024-05-15 21:57:05 -04:00
parent 1d958e8a52
commit 282f653c75
3 changed files with 367 additions and 6 deletions

View File

@@ -1,4 +1,7 @@
use serde_yaml;
use chrono::DateTime;
use chrono::naive::NaiveDateTime;
use regex::Regex;
fn main() {
println!("{:?}", Task::new())
@@ -12,20 +15,85 @@ struct Task(serde_yaml::Mapping);
//pub sub: Vec<Task>,
impl Task {
fn new() -> Task {
Task(serde_yaml::Mapping::new())
}
fn is_due(&self) -> bool {
assert!(false);
false
}
}
/*
#[derive(Debug, Clone)]
#[derive(Debug)]
struct When(String);
impl When {
fn is_due(&self) -> bool {
assert!(false);
false
fn new(src: String) -> Result<When, String> {
let duration = Regex::new(r"").unwrap();
match duration.is_match(&src) {
_ => {},
};
Err("not impl: Duration".to_string())
//Err("not impl: TS".to_string())
//Err("not impl: cron".to_string())
}
}
#[derive(Debug)]
struct TS(u64);
impl TS {
fn new(src: String) -> Result<TS, String> {
match DateTime::parse_from_str(
&format!("{} +0000", src),
"%Y-%m-%dT%H:%MZ %z",
) {
Ok(v) => { return Ok(TS(v.timestamp() as u64)) },
_ => {},
};
match NaiveDateTime::parse_from_str(
&format!("{}:00", src),
"%Y-%m-%dT%H:%M",
) {
Ok(v) => { return Ok(TS(v.timestamp() as u64)) },
_ => {},
};
Err(format!("cannot parse date format from {}", src))
}
fn unix(&self) -> u64 {
self.0
}
fn to_string(&self) -> String {
DateTime::from_timestamp(self.0 as i64, 0)
.unwrap()
.format("%Y-%m-%dT%H:%MZ")
.to_string()
}
}
#[cfg(test)]
mod test_ts {
use super::*;
#[test]
fn parse() {
match TS::new("2024-05-01T00:00Z".to_string()) {
Ok(ts) => {
assert_eq!(1714521600, ts.unix());
assert_eq!("2024-05-01T00:00Z", ts.to_string());
},
Err(err) => assert!(false, "failed to parse ts: {}", err),
};
match TS::new("2024-05-01T00".to_string()) {
Ok(ts) => {
assert_eq!(1714521600, ts.unix());
assert_eq!("2024-05-01T00:00Z", ts.to_string());
},
Err(err) => assert!(false, "failed to parse ts: {}", err),
};
}
}
*/