1use hopper_runtime::error::ProgramError;
4
5#[inline(always)]
7pub fn check_deadline_passed(deadline: i64, now: i64) -> Result<(), ProgramError> {
8 if now < deadline {
9 return Err(ProgramError::InvalidAccountData);
10 }
11 Ok(())
12}
13
14#[inline(always)]
16pub fn check_deadline_not_passed(deadline: i64, now: i64) -> Result<(), ProgramError> {
17 if now >= deadline {
18 return Err(ProgramError::InvalidAccountData);
19 }
20 Ok(())
21}
22
23#[inline(always)]
25pub fn check_cooldown_elapsed(
26 last_op_time: i64,
27 now: i64,
28 cooldown_seconds: i64,
29) -> Result<(), ProgramError> {
30 let elapsed = now.saturating_sub(last_op_time);
31 if elapsed < cooldown_seconds {
32 return Err(ProgramError::InvalidAccountData);
33 }
34 Ok(())
35}
36
37#[inline(always)]
39pub fn check_staleness(
40 updated_at: i64,
41 now: i64,
42 max_age_seconds: i64,
43) -> Result<(), ProgramError> {
44 let age = now.saturating_sub(updated_at);
45 if age > max_age_seconds {
46 return Err(ProgramError::InvalidAccountData);
47 }
48 Ok(())
49}
50
51#[inline(always)]
53pub fn check_in_future(timestamp: i64, now: i64) -> Result<(), ProgramError> {
54 if timestamp <= now {
55 return Err(ProgramError::InvalidAccountData);
56 }
57 Ok(())
58}
59
60#[inline(always)]
62pub fn check_in_past(timestamp: i64, now: i64) -> Result<(), ProgramError> {
63 if timestamp > now {
64 return Err(ProgramError::InvalidAccountData);
65 }
66 Ok(())
67}