use super::kind::FileKind;
use super::{Concurrency, Defaults, Job, Permissions, Step, Trigger};
use crate::domain::file::site::WorkflowPath;
#[derive(Debug, Clone)]
pub struct ParsedWorkflow {
pub path: WorkflowPath,
pub on: Vec<Trigger>,
pub permissions: Option<Permissions>,
pub concurrency: Option<Concurrency>,
pub defaults: Option<Defaults>,
pub jobs: Vec<Job>,
}
impl ParsedWorkflow {
#[must_use]
pub fn has_trigger(&self, t: &Trigger) -> bool {
self.on.iter().any(|x| x == t)
}
}
#[derive(Debug, Clone)]
pub struct ParsedAction {
pub path: WorkflowPath,
pub steps: Vec<Step>,
}
#[derive(Debug, Clone)]
pub enum Parsed {
Workflow(ParsedWorkflow),
Action(ParsedAction),
}
impl Parsed {
#[must_use]
pub fn path(&self) -> &WorkflowPath {
match self {
Self::Workflow(w) => &w.path,
Self::Action(a) => &a.path,
}
}
#[must_use]
pub fn kind(&self) -> FileKind {
match self {
Self::Workflow(_) => FileKind::Workflow,
Self::Action(_) => FileKind::ActionDefinition,
}
}
#[must_use]
pub fn as_workflow(&self) -> Option<&ParsedWorkflow> {
match self {
Self::Workflow(w) => Some(w),
Self::Action(_) => None,
}
}
}