1#[cfg(not(feature = "std"))]
2use alloc::vec::Vec;
3#[cfg(feature = "scale")]
4use codec::{Decode, Encode};
5#[cfg(feature = "scale")]
6use scale_info::TypeInfo;
7
8use super::constants::*;
9
10#[derive(Clone, Default, Debug, PartialEq, Eq, PartialOrd, Ord)]
22#[cfg_attr(feature = "scale", derive(Encode, Decode, TypeInfo))]
23pub struct DateTime {
24 pub year: u16,
26 pub month: u8,
27 pub day: u8,
28
29 pub hour: u8,
31 pub minute: u8,
32 pub second: u8,
33 pub ms: u16,
34}
35
36impl DateTime {
37 pub fn to_day_unixtime(&self) -> u64 {
39 self.day.checked_sub(1).expect("failed to calc day - 1") as u64 * MS_IN_DAY
40 + self.hour as u64 * MS_IN_HOUR
41 + self.minute as u64 * MS_IN_MIN
42 + self.second as u64 * MS_IN_SEC
43 + self.ms as u64
44 }
45}
46
47#[derive(Clone, Debug, PartialEq, Eq, PartialOrd, Ord)]
50#[cfg_attr(feature = "scale", derive(Encode, Decode, TypeInfo))]
51pub struct Schedule {
52 pub start: DateTime,
53 pub items: Vec<(Frequency, u32)>, pub end: Option<DateTime>,
55}
56
57#[derive(Clone, Copy, Debug, PartialEq, Eq, PartialOrd, Ord)]
58#[cfg_attr(feature = "scale", derive(Encode, Decode, TypeInfo))]
59#[repr(u8)]
60pub enum Frequency {
61 Year,
62 Month,
63 Week,
64 Day,
65 Hour,
66 Minute,
67 Second,
68 Ms,
69}
70
71impl Frequency {
72 #[inline]
73 pub fn to_ms(&self) -> u32 {
74 match self {
75 Frequency::Year => 666_u32,
76 Frequency::Month => 999_u32,
77 Frequency::Week => 7 * MS_IN_DAY as u32,
78 Frequency::Day => MS_IN_DAY as u32,
79 Frequency::Hour => MS_IN_HOUR as u32,
80 Frequency::Minute => MS_IN_MIN as u32,
81 Frequency::Second => MS_IN_SEC as u32,
82 Frequency::Ms => 1_u32,
83 }
84 }
85}
86
87#[derive(PartialEq, Eq, Debug)]
88pub enum ValidationError {
89 OutOfScope,
91 Invalid
93}