use anyhow::Result;
use tokmd_settings::ScanOptions;
use tokmd_types::ModuleReceipt;
use crate::settings::{ModuleSettings, ScanSettings};
use crate::{InMemoryFile, build_module_receipt};
use super::{
collect_pure_in_memory_rows, deterministic_in_memory_scan_options, scan_paths_or_current_dir,
settings_to_scan_options,
};
pub fn module_workflow(scan: &ScanSettings, module: &ModuleSettings) -> Result<ModuleReceipt> {
let scan_opts = settings_to_scan_options(scan);
let paths = scan_paths_or_current_dir(scan);
let languages = tokmd_scan::scan(&paths, &scan_opts)?;
let report = tokmd_model::create_module_report(
&languages,
&module.module_roots,
module.module_depth,
module.children,
module.top,
);
Ok(build_module_receipt(&paths, &scan_opts, module, report))
}
pub fn module_workflow_from_inputs(
inputs: &[InMemoryFile],
scan_opts: &ScanOptions,
module: &ModuleSettings,
) -> Result<ModuleReceipt> {
let scan_opts = deterministic_in_memory_scan_options(scan_opts);
let (paths, rows) = collect_pure_in_memory_rows(
inputs,
&scan_opts,
&module.module_roots,
module.module_depth,
module.children,
)?;
let report = tokmd_model::create_module_report_from_rows(
&rows,
&module.module_roots,
module.module_depth,
module.children,
module.top,
);
Ok(build_module_receipt(&paths, &scan_opts, module, report))
}