ve3_shared/helpers/
time.rs1use crate::helpers::governance::get_period;
2use cosmwasm_schema::cw_serde;
3use cosmwasm_std::{Env, StdResult};
4
5#[cw_serde]
6#[derive(Default)]
7pub enum Time {
8 #[default]
9 Current,
10 Next,
11 Last,
12 Time(u64),
13 Period(u64),
14}
15
16pub trait GetPeriod {
17 fn get_period(self, env: &Env) -> StdResult<u64>;
18}
19impl GetPeriod for Option<Time> {
20 fn get_period(self, env: &Env) -> StdResult<u64> {
21 match self {
22 Some(time) => time.get_period(env),
23 None => get_period(env.block.time.seconds()),
24 }
25 }
26}
27
28impl GetPeriod for Time {
29 fn get_period(self, env: &Env) -> StdResult<u64> {
30 match self {
31 Time::Current => get_period(env.block.time.seconds()),
32 Time::Next => Ok(get_period(env.block.time.seconds())? + 1),
33 Time::Last => Ok(get_period(env.block.time.seconds())? - 1),
34 Time::Time(time) => get_period(time),
35 Time::Period(period) => Ok(period),
36 }
37 }
38}
39
40#[cw_serde]
41#[derive(Default)]
42pub enum Times {
43 #[default]
44 Current,
45 Times(Vec<u64>),
46 Periods(Vec<u64>),
47}
48
49pub trait GetPeriods {
50 fn get_periods(self, env: &Env) -> StdResult<Vec<u64>>;
51}
52impl GetPeriods for Option<Times> {
53 fn get_periods(self, env: &Env) -> StdResult<Vec<u64>> {
54 match self {
55 Some(time) => match time {
56 Times::Current => Ok(vec![get_period(env.block.time.seconds())?]),
57 Times::Times(time) => time.into_iter().map(get_period).collect::<StdResult<Vec<_>>>(),
58 Times::Periods(periods) => Ok(periods),
59 },
60 None => Ok(vec![get_period(env.block.time.seconds())?]),
61 }
62 }
63}