1use chrono::format::ParseError;
2use chrono::{NaiveDate, NaiveTime};
3use std::format;
4
5pub fn parse_date(
7    day: u32,
8    month: u32,
9    year: i32,
10) -> Result<NaiveDate, ParseError> {
11    let f = format!("{}.{}.{}", day, month, year).to_string();
12    let date = NaiveDate::parse_from_str(&f, "%d.%m.%Y")?;
13    Ok(date)
14}
15
16pub fn parse_date_from_str(date: &str) -> Result<NaiveDate, ParseError> {
18    let d = NaiveDate::parse_from_str(date, "%d.%m.%Y")?;
19    Ok(d)
20}
21
22pub fn parse_time(
24    hour: i32,
25    min: i32,
26    sec: i32,
27) -> Result<NaiveTime, ParseError> {
28    let f = format!("{}:{}:{}", hour, min, sec).to_string();
29    let time = NaiveTime::parse_from_str(&f, "%H:%M:%S")?;
30    Ok(time)
31}
32
33pub fn parse_time_from_str(time: &str) -> Result<NaiveTime, ParseError> {
35    let items: Vec<_> = time.clone().split(&[':'][..]).collect();
36    let mut time_string: String = "".to_string();
37    for (i, item) in items.iter().enumerate() {
38        if i > 2 {
39            break;
40        }
41        if i == 0 {
42            time_string = format!("{}", item);
43        } else {
44            time_string = format!("{}:{}", time_string, item);
45        }
46    }
47    match items.len() {
48        1 => {
49            time_string = format!("{}:0:0", time_string);
50        },
51        2 => {
52            time_string = format!("{}:0", time_string);
53        },
54        _ => {},
55    }
56    let t = NaiveTime::parse_from_str(time_string.as_str(), "%H:%M:%S")?;
57    Ok(t)
58}