use crate::domain::SourceUnit;
use std::path::{Path, PathBuf};
pub trait SourceLoader: Send + Sync {
fn load(&self, root: &Path) -> Result<Vec<SourceUnit>, LoadError>;
}
#[derive(Debug, thiserror::Error)]
pub enum LoadError {
#[error("root not found: {0}")]
RootNotFound(PathBuf),
#[error("i/o error reading {path}: {message}")]
Io { path: PathBuf, message: String },
#[error("utf-8 decode error in {path}: {message}")]
DecodeError { path: PathBuf, message: String },
#[error("loader refused root: {0}")]
Refused(String),
}