use chrono::{DateTime, Utc};
use serde::{Deserialize, Serialize};
use uuid::Uuid;
pub type WorkflowPackageId = Uuid;
#[derive(Debug, Clone, Serialize, Deserialize, PartialEq)]
pub struct WorkflowMetadata {
pub id: WorkflowPackageId,
pub registry_id: Uuid,
pub package_name: String,
pub version: String,
pub description: Option<String>,
pub author: Option<String>,
pub tasks: Vec<String>,
pub schedules: Vec<String>,
pub created_at: DateTime<Utc>,
pub updated_at: DateTime<Utc>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct PackageMetadata {
pub package: String,
pub version: String,
pub description: Option<String>,
pub author: Option<String>,
pub build_info: BuildInfo,
pub tasks: Vec<TaskInfo>,
pub schedules: Vec<ScheduleInfo>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct BuildInfo {
pub rustc_version: String,
pub cloacina_version: String,
pub build_timestamp: DateTime<Utc>,
pub target: String,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TaskInfo {
pub id: String,
pub dependencies: Vec<String>,
pub description: Option<String>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct ScheduleInfo {
pub name: String,
pub cron: String,
pub workflow: String,
}
#[derive(Debug)]
pub struct WorkflowPackage {
pub metadata: PackageMetadata,
pub package_data: Vec<u8>,
}
impl WorkflowPackage {
pub fn new(metadata: PackageMetadata, package_data: Vec<u8>) -> Self {
Self {
metadata,
package_data,
}
}
pub fn from_file(_path: impl AsRef<std::path::Path>) -> Result<Self, std::io::Error> {
todo!("Implement using cloacina-ctl archive extraction")
}
}
#[derive(Debug)]
pub struct LoadedWorkflow {
pub metadata: WorkflowMetadata,
pub package_data: Vec<u8>,
pub compiled_data: Option<Vec<u8>>,
}
impl LoadedWorkflow {
pub fn new(
metadata: WorkflowMetadata,
package_data: Vec<u8>,
compiled_data: Option<Vec<u8>>,
) -> Self {
Self {
metadata,
package_data,
compiled_data,
}
}
}