seex 0.1.0-beta.4

Unified Rust SDK facade for Seex.
use chrono::{DateTime, Utc};

use crate::model::types::ProjectId;

#[derive(Clone, Debug, Eq, PartialEq, Hash)]
pub struct RunId(String);

impl RunId {
    pub fn from_string(value: impl Into<String>) -> Self {
        Self(value.into())
    }

    pub fn as_str(&self) -> &str {
        &self.0
    }
}

#[derive(Clone, Copy, Debug, Eq, PartialEq)]
pub enum RunStatus {
    Running,
    Finished,
    Failed,
}

#[derive(Clone, Debug, Eq, PartialEq)]
pub struct Run {
    pub run_id: RunId,
    pub project_id: ProjectId,
    pub name: String,
    pub status: RunStatus,
    pub created_at: DateTime<Utc>,
    pub started_at: DateTime<Utc>,
    pub finished_at: Option<DateTime<Utc>>,
}

impl Run {
    pub fn finish(self, finished_at: DateTime<Utc>) -> Self {
        Self {
            status: RunStatus::Finished,
            finished_at: Some(finished_at),
            ..self
        }
    }
}