ve3_shared/helpers/
time.rs

1use 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}