agsol-common 0.2.2

Common utilities to make development on Solana easier.
Documentation
use super::MaxSerializedLen;
use borsh::{BorshDeserialize, BorshSerialize};
use solana_program::clock::UnixTimestamp;
use std::cmp::Ordering;

#[derive(BorshDeserialize, BorshSerialize, Debug, Clone)]
pub struct LockedItem<T: BorshDeserialize + BorshSerialize + MaxSerializedLen> {
    pub item: T,
    pub expires: UnixTimestamp,
}

impl<T> MaxSerializedLen for LockedItem<T>
where
    T: BorshSerialize + BorshDeserialize + MaxSerializedLen,
{
    const MAX_SERIALIZED_LEN: usize = T::MAX_SERIALIZED_LEN + UnixTimestamp::MAX_SERIALIZED_LEN;
}

impl<T> PartialOrd for LockedItem<T>
where
    T: BorshSerialize + BorshDeserialize + MaxSerializedLen,
{
    fn partial_cmp(&self, other: &Self) -> Option<Ordering> {
        Some(self.expires.cmp(&other.expires))
    }
}

impl<T> Ord for LockedItem<T>
where
    T: BorshSerialize + BorshDeserialize + MaxSerializedLen,
{
    fn cmp(&self, other: &Self) -> Ordering {
        self.expires.cmp(&other.expires)
    }
}

impl<T> PartialEq for LockedItem<T>
where
    T: BorshSerialize + BorshDeserialize + MaxSerializedLen,
{
    fn eq(&self, other: &Self) -> bool {
        self.expires == other.expires
    }
}

impl<T> Eq for LockedItem<T> where T: BorshSerialize + BorshDeserialize + MaxSerializedLen {}

impl<T> LockedItem<T>
where
    T: BorshSerialize + BorshDeserialize + MaxSerializedLen,
{
    pub fn expired(&self, current_time: UnixTimestamp) -> bool {
        self.expires < current_time
    }
}