#![expect(clippy::todo, reason = "skeleton: #6833")]
use crate::level::Level;
pub mod observer;
pub mod preserved;
pub use preserved::{AnalysisId, MAX_ANALYSES, Preserved};
use observer::PassObserver;
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct PassDesc {
pub name: &'static str,
pub level: Level,
pub mandatory: bool,
pub preserves: Preserved,
}
pub trait Pass {
const DESC: PassDesc;
}
#[derive(Debug, Clone, Copy)]
pub struct Pipeline {
pub level: Level,
pub passes: &'static [PassDesc],
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct PassFailure {
pub reason: &'static str,
}
#[derive(Debug, Default)]
pub struct PassManager<O: PassObserver> {
observer: O,
}
impl<O: PassObserver> PassManager<O> {
#[must_use]
pub const fn new(observer: O) -> Self {
Self { observer }
}
pub fn run<F>(&mut self, pipeline: &Pipeline, run_pass: F) -> Result<(), PassFailure>
where
F: FnMut(&PassDesc) -> Result<(), PassFailure>,
{
let _ = (pipeline, run_pass);
todo!()
}
pub fn into_observer(self) -> O {
self.observer
}
}