tito 0.4.6

Database layer on TiKV with indexing, relationships, transactions, and built-in transactional outbox with partitioned scheduled pub/sub with consumer groups
Documentation
use serde::{Deserialize, Serialize};

use crate::types::{
    TitoEmbeddedRelationshipConfig, TitoIndexBlockType, TitoIndexConfig, TitoIndexField,
    TitoModelTrait,
};

#[derive(Debug, Clone, Default, Serialize, Deserialize)]
#[serde(default)]
pub struct TitoEvent {
    pub id: String,
    pub name: String,
    pub payload: String,
    pub created_at: i64,
    pub status: String,
    pub event_key: String,
    pub event_data: String,
    pub scheduled_at: i64,
    pub processed_at: i64,
    pub retry_count: u32,
    pub max_retries: u32,
    pub error: Option<String>,
}

impl TitoModelTrait for TitoEvent {
    fn id(&self) -> String {
        self.id.clone()
    }

    fn table() -> String {
        "event".to_string()
    }

    fn key_prefix() -> String {
        "event".to_string()
    }

    fn indexes(&self) -> Vec<TitoIndexConfig> {
        vec![
            TitoIndexConfig {
                condition: true,
                name: "event-by-name".to_string(),
                fields: vec![TitoIndexField {
                    name: "name".to_string(),
                    r#type: TitoIndexBlockType::String,
                }],
            },
            TitoIndexConfig {
                condition: !self.status.is_empty(),
                name: "event-by-status".to_string(),
                fields: vec![TitoIndexField {
                    name: "status".to_string(),
                    r#type: TitoIndexBlockType::String,
                }],
            },
        ]
    }

    fn relationships() -> Vec<TitoEmbeddedRelationshipConfig> {
        vec![]
    }
}