use std::path::PathBuf;
use thiserror::Error;
#[derive(Debug, Error)]
pub enum Error {
#[error("failed to scan workflows: {reason}")]
ScanFailed { reason: String },
#[error("failed to parse workflow {path}: {reason}")]
ParseFailed { path: String, reason: String },
#[error("failed to update workflow {path}: {reason}")]
UpdateFailed { path: String, reason: String },
}
pub struct UpdateResult {
pub file: PathBuf,
pub changes: Vec<String>,
}
pub trait Scanner {
fn scan(
&self,
) -> Box<dyn Iterator<Item = Result<crate::domain::file::actions::Located, Error>> + '_>;
fn scan_paths(&self) -> Box<dyn Iterator<Item = Result<std::path::PathBuf, Error>> + '_>;
fn scan_all_located(&self) -> Result<Vec<crate::domain::file::actions::Located>, Error> {
self.scan().collect()
}
fn find_workflow_paths(&self) -> Result<Vec<std::path::PathBuf>, Error> {
self.scan_paths().collect()
}
fn repo_rel(&self, path: &std::path::Path) -> crate::domain::file::site::WorkflowPath;
fn scan_all_with_parsed(
&self,
) -> Result<
(
Vec<crate::domain::file::actions::Located>,
Vec<crate::domain::file::parsed::Parsed>,
),
Error,
>;
}