use derive_more::From;
use crate::Error;
#[derive(Clone, Debug, Eq, PartialEq, Ord, PartialOrd, From, packable::Packable)]
#[cfg_attr(feature = "serde", derive(serde::Serialize, serde::Deserialize))]
#[packable(unpack_error = Error)]
pub struct TimelockUnlockCondition(#[packable(verify_with = verify_timestamp)] u32);
impl TimelockUnlockCondition {
pub const KIND: u8 = 2;
#[inline(always)]
pub fn new(timestamp: u32) -> Result<Self, Error> {
verify_timestamp::<true>(×tamp, &())?;
Ok(Self(timestamp))
}
#[inline(always)]
pub fn timestamp(&self) -> u32 {
self.0
}
}
#[inline]
fn verify_timestamp<const VERIFY: bool>(timestamp: &u32, _: &()) -> Result<(), Error> {
if VERIFY && *timestamp == 0 {
Err(Error::TimelockUnlockConditionZero)
} else {
Ok(())
}
}
#[cfg(feature = "dto")]
#[allow(missing_docs)]
pub mod dto {
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Eq, PartialEq, Serialize, Deserialize)]
pub struct TimelockUnlockConditionDto {
#[serde(rename = "type")]
pub kind: u8,
#[serde(rename = "unixTime")]
pub timestamp: u32,
}
}