pttodoer
This commit is contained in:
@@ -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),
|
||||
};
|
||||
}
|
||||
}
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user