use thiserror::Error;
use crate::model::names::{ApplicationName, ModuleName, RelativePath};
use crate::model::snapshot::{HrlFile, Module, Visibility};
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ScannedFile {
pub path: RelativePath,
pub app: ApplicationName,
pub bytes: Vec<u8>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct ExtractedSource {
pub modules: Vec<Module>,
pub headers: Vec<HrlFile>,
}
#[derive(Debug, Error)]
pub enum ExtractError {
#[error("invalid utf-8 in {path} at byte offset {offset}")]
InvalidUtf8 { path: RelativePath, offset: usize },
}
pub fn classify_visibility(
module: &ModuleName,
hidden: bool,
test_only: bool,
public_modules: &[ModuleName],
internal_modules: &[ModuleName],
) -> Visibility {
if internal_modules.contains(module) {
return Visibility::Hidden;
}
if hidden && !public_modules.contains(module) {
return Visibility::Hidden;
}
if test_only {
return Visibility::TestOnly;
}
Visibility::Public
}