#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Severity {
Error,
Warn,
Info,
}
impl Severity {
pub fn as_str(self) -> &'static str {
match self {
Severity::Error => "error",
Severity::Warn => "warn",
Severity::Info => "info",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Axis {
Graph,
Workflow,
}
impl Axis {
pub fn as_str(self) -> &'static str {
match self {
Axis::Graph => "graph",
Axis::Workflow => "workflow",
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Kind {
GraphOrphanNode,
GraphDanglingEdge,
GraphEdgesZero,
GraphSpecNoHit,
GraphProjectionEmptyRender,
WorkflowEmitTargetUnregistered,
WorkflowTriggerInfraMissing,
WorkflowDuplicateTrigger,
WorkflowPersonaNoWorkflow,
WorkflowLastFireFailed,
WorkflowDisabled,
}
impl Kind {
pub fn as_str(self) -> &'static str {
match self {
Kind::GraphOrphanNode => "graph.orphan_node",
Kind::GraphDanglingEdge => "graph.dangling_edge",
Kind::GraphEdgesZero => "graph.edges_zero",
Kind::GraphSpecNoHit => "graph.spec_no_hit",
Kind::GraphProjectionEmptyRender => "graph.projection_empty_render",
Kind::WorkflowEmitTargetUnregistered => "workflow.emit_target_unregistered",
Kind::WorkflowTriggerInfraMissing => "workflow.trigger_infra_missing",
Kind::WorkflowDuplicateTrigger => "workflow.duplicate_trigger",
Kind::WorkflowPersonaNoWorkflow => "workflow.persona_no_workflow",
Kind::WorkflowLastFireFailed => "workflow.last_fire_failed",
Kind::WorkflowDisabled => "workflow.disabled",
}
}
pub fn axis(self) -> Axis {
match self {
Kind::GraphOrphanNode
| Kind::GraphDanglingEdge
| Kind::GraphEdgesZero
| Kind::GraphSpecNoHit
| Kind::GraphProjectionEmptyRender => Axis::Graph,
Kind::WorkflowEmitTargetUnregistered
| Kind::WorkflowTriggerInfraMissing
| Kind::WorkflowDuplicateTrigger
| Kind::WorkflowPersonaNoWorkflow
| Kind::WorkflowLastFireFailed
| Kind::WorkflowDisabled => Axis::Workflow,
}
}
pub fn default_severity(self) -> Severity {
match self {
Kind::GraphOrphanNode | Kind::GraphSpecNoHit => Severity::Warn,
Kind::GraphDanglingEdge | Kind::GraphEdgesZero | Kind::GraphProjectionEmptyRender => {
Severity::Error
}
Kind::WorkflowEmitTargetUnregistered | Kind::WorkflowTriggerInfraMissing => {
Severity::Error
}
Kind::WorkflowDuplicateTrigger
| Kind::WorkflowPersonaNoWorkflow
| Kind::WorkflowLastFireFailed => Severity::Warn,
Kind::WorkflowDisabled => Severity::Info,
}
}
}
#[derive(Debug, Clone, Default, PartialEq, Eq)]
pub struct Location {
pub node_id: Option<String>,
pub persona_id: Option<String>,
pub workflow_id: Option<String>,
pub edge: Option<(String, String)>, pub projection_name: Option<String>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct Finding {
pub severity: Severity,
pub axis: Axis,
pub kind: Kind,
pub location: Location,
pub description: String,
pub fix: String,
}