rcqs 0.3.0

Catalog Queue System for Redis.
Documentation
use super::expire::Expiration;
use chrono::{TimeZone, Utc};
use redis_macros::{FromRedisValue, ToRedisArgs};
use serde::{de::DeserializeOwned, Deserialize, Serialize};
use std::fmt::Debug;
use uuid::Uuid;

#[derive(Debug, Serialize, Deserialize, FromRedisValue, ToRedisArgs)]
pub struct CatalogItem<I> {
    pub(crate) id: Uuid,
    pub(crate) contents: I,
    pub(crate) created_on: i64,
    pub(crate) expires_on: Option<f64>,
}

impl<I> CatalogItem<I>
where
    I: Debug + Serialize + DeserializeOwned,
{
    pub fn new(contents: I) -> Self {
        CatalogItem {
            id: Uuid::new_v4(),
            contents,
            created_on: Utc::now().timestamp(),
            expires_on: None,
        }
    }

    pub fn new_with_expiration(expiration: Expiration, contents: I) -> Self {
        CatalogItem {
            id: Uuid::new_v4(),
            contents,
            created_on: Utc::now().timestamp(),
            expires_on: Some(expiration.as_f64_timestamp()),
        }
    }

    pub fn id(&self) -> Uuid {
        self.id
    }

    pub fn contents(&self) -> &I {
        &self.contents
    }

    pub fn take_contents(self) -> I {
        self.contents
    }

    pub fn expires_on_f64_timestamp(&self) -> Option<f64> {
        self.expires_on
    }

    pub fn created_on(&self) -> Option<chrono::DateTime<Utc>> {
        Utc.timestamp_opt(self.created_on, 0).single()
    }
}