logisheets_controller/calc_engine/calculator/funcs/datetime/
time.rs1use logisheets_base::datetime::get_decimal_num_by_time;
2use logisheets_parser::ast;
3
4use crate::calc_engine::connector::Connector;
5
6use super::super::{CalcValue, CalcVertex, Value};
7
8pub fn calc<C>(args: Vec<CalcVertex>, fetcher: &mut C) -> CalcVertex
9where
10 C: Connector,
11{
12 assert_or_return!(args.len() == 3, ast::Error::Unspecified);
13 let mut args_iter = args.into_iter();
14 let first = fetcher.get_calc_value(args_iter.next().unwrap());
15 assert_f64_from_calc_value!(hour, first);
16 assert_or_return!(hour >= 0., ast::Error::Num);
17 let second = fetcher.get_calc_value(args_iter.next().unwrap());
18 assert_f64_from_calc_value!(minute, second);
19 assert_or_return!(minute >= 0., ast::Error::Num);
20 let third = fetcher.get_calc_value(args_iter.next().unwrap());
21 assert_f64_from_calc_value!(second, third);
22 assert_or_return!(second >= 0., ast::Error::Num);
23 let res = get_decimal_num_by_time(hour as u32, minute as u32, second as u32);
24 match res {
25 Some(r) => CalcVertex::from_number(r as f64),
26 None => CalcVertex::from_error(ast::Error::Num),
27 }
28}