k8s-maestro 1.0.0

A Kubernetes job orchestrator tool library
Documentation
use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub enum FileEvent {
    Created(FileMetadata),
    Modified {
        filename: String,
        path: String,
        size: u64,
        modified_at: DateTime<Utc>,
    },
    Deleted {
        filename: String,
        path: String,
        deleted_at: DateTime<Utc>,
    },
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct FileMetadata {
    pub filename: String,
    pub path: String,
    pub mime_type: String,
    pub size: u64,
    pub created_at: DateTime<Utc>,
    pub modified_at: DateTime<Utc>,
}

#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)]
pub struct FileContent {
    pub metadata: FileMetadata,
    pub content: Vec<u8>,
}

impl FileMetadata {
    pub fn new(
        filename: String,
        path: String,
        mime_type: String,
        size: u64,
        created_at: DateTime<Utc>,
        modified_at: DateTime<Utc>,
    ) -> Self {
        Self {
            filename,
            path,
            mime_type,
            size,
            created_at,
            modified_at,
        }
    }
}

impl FileContent {
    pub fn new(metadata: FileMetadata, content: Vec<u8>) -> Self {
        Self { metadata, content }
    }
}

#[cfg(test)]
mod tests {
    use super::*;
    use chrono::Utc;

    #[test]
    fn test_file_event_created() {
        let metadata = FileMetadata::new(
            "test.txt".to_string(),
            "/data/test.txt".to_string(),
            "text/plain".to_string(),
            100,
            Utc::now(),
            Utc::now(),
        );
        let event = FileEvent::Created(metadata.clone());
        assert!(matches!(event, FileEvent::Created(_)));
    }

    #[test]
    fn test_file_metadata_new() {
        let metadata = FileMetadata::new(
            "test.txt".to_string(),
            "/data/test.txt".to_string(),
            "text/plain".to_string(),
            100,
            Utc::now(),
            Utc::now(),
        );
        assert_eq!(metadata.filename, "test.txt");
        assert_eq!(metadata.size, 100);
    }

    #[test]
    fn test_file_content_new() {
        let metadata = FileMetadata::new(
            "test.txt".to_string(),
            "/data/test.txt".to_string(),
            "text/plain".to_string(),
            100,
            Utc::now(),
            Utc::now(),
        );
        let content = FileContent::new(metadata.clone(), b"test data".to_vec());
        assert_eq!(content.metadata.filename, "test.txt");
        assert_eq!(content.content, b"test data");
    }
}