1use std::collections::HashMap;
10use std::path::PathBuf;
11
12use serde::Serialize;
13
14use crate::config::{EnvVar, ModuleSpec, ShellAlias};
15
16mod git;
17mod loader;
18mod lockfile;
19mod registry;
20mod resolve;
21
22pub use git::{
23 GitSource, TagSignatureStatus, check_tag_signature, default_module_cache_dir, fetch_git_source,
24 get_head_commit_sha, git_cache_dir, is_git_source, parse_git_source,
25};
26pub use loader::{load_module, load_modules, resolve_dependency_order};
27pub use lockfile::{
28 diff_module_specs, hash_module_contents, load_all_modules, load_locked_modules, load_lockfile,
29 save_lockfile, verify_lockfile_integrity,
30};
31pub use registry::{
32 FetchedRemoteModule, RegistryModule, RegistryRef, extract_registry_name,
33 fetch_registry_modules, fetch_remote_module, is_registry_ref, latest_module_version,
34 parse_registry_ref, resolve_profile_module_name,
35};
36pub use resolve::{
37 resolve_module_files, resolve_module_packages, resolve_modules, resolve_package,
38};
39
40#[derive(Debug, Clone, Serialize)]
46pub struct ResolvedPackage {
47 pub canonical_name: String,
49 pub resolved_name: String,
51 pub manager: String,
53 pub version: Option<String>,
55 pub script: Option<String>,
57}
58
59#[derive(Debug, Clone, Serialize)]
61pub struct ResolvedFile {
62 pub source: PathBuf,
64 pub target: PathBuf,
66 pub is_git_source: bool,
68 pub strategy: Option<crate::config::FileStrategy>,
70 pub encryption: Option<crate::config::EncryptionSpec>,
72}
73
74#[derive(Debug, Clone, Serialize)]
76pub struct ResolvedModule {
77 pub name: String,
78 pub packages: Vec<ResolvedPackage>,
79 pub files: Vec<ResolvedFile>,
80 pub env: Vec<EnvVar>,
81 pub aliases: Vec<ShellAlias>,
82 pub system: HashMap<String, serde_yaml::Value>,
85 pub pre_apply_scripts: Vec<crate::config::ScriptEntry>,
86 pub post_apply_scripts: Vec<crate::config::ScriptEntry>,
87 pub pre_reconcile_scripts: Vec<crate::config::ScriptEntry>,
88 pub post_reconcile_scripts: Vec<crate::config::ScriptEntry>,
89 pub on_change_scripts: Vec<crate::config::ScriptEntry>,
90 pub depends: Vec<String>,
91 pub dir: PathBuf,
93}
94
95#[derive(Debug, Clone, Serialize)]
101pub struct LoadedModule {
102 pub name: String,
103 pub spec: ModuleSpec,
104 pub dir: PathBuf,
105}
106
107#[cfg(test)]
112mod tests;