Skip to main content

fomod_oxide/
lib.rs

1//! # fomod-oxide
2//!
3//! Parse and evaluate [FOMOD](https://fomod-docs.readthedocs.io/) mod installer configurations.
4//!
5//! FOMOD is an XML-based format used by mod managers (Mod Organizer 2, Vortex, etc.)
6//! to define guided installation wizards for game mods.
7//!
8//! ## Quick start
9//!
10//! ```no_run
11//! use fomod_oxide::{ModuleConfig, Installer};
12//!
13//! let xml = std::fs::read_to_string("fomod/ModuleConfig.xml").unwrap();
14//! let config = ModuleConfig::parse(&xml).unwrap();
15//! let mut installer = Installer::new(config);
16//!
17//! // Present visible steps to the user, collect selections...
18//! for (idx, step) in installer.visible_steps() {
19//!     println!("Step {idx}: {}", step.name);
20//! }
21//!
22//! // Record selections and resolve the install plan
23//! installer.select(0, 0, vec![0]);
24//! let plan = installer.resolve();
25//! for op in &plan.operations {
26//!     println!("{} -> {}", op.source, op.destination);
27//! }
28//! ```
29
30pub mod condition;
31pub mod config;
32pub mod declarative;
33pub mod error;
34pub mod info;
35pub mod installer;
36
37pub use condition::{EvalContext, Evaluate, FileState};
38pub use config::ModuleConfig;
39pub use declarative::{
40    hash_xml, DeclarativeConfig, DeclarativeError, SelectionDiff, SelectionSummary,
41    SCHEMA_VERSION,
42};
43pub use error::FomodError;
44pub use info::FomodInfo;
45pub use installer::{
46    CompletionStatus, FileConflict, FileConflictSource, FileOperation, FlagImpact, InstallPlan,
47    Installer, SelectionError, ValidationHint,
48};