1use std::path::Path;
2
3pub mod checks;
4pub mod config;
5pub mod errors;
6pub mod io;
7pub mod report;
8pub mod run;
9pub mod warnings;
10
11pub use checks as check;
12pub use config::{resolve_config_location, ConfigLocation};
13pub use errors::ConfigError;
14pub use run::events::{set_observer, RunEvent, RunObserver};
15pub use run::{run, run_with_base, EntityOutcome, RunOutcome};
16
17pub type FloeResult<T> = Result<T, Box<dyn std::error::Error + Send + Sync>>;
18
19#[derive(Debug, Default)]
20pub struct ValidateOptions {
21 pub entities: Vec<String>,
22}
23
24#[derive(Debug, Default)]
25pub struct RunOptions {
26 pub run_id: Option<String>,
27 pub entities: Vec<String>,
28}
29
30pub fn validate(config_path: &Path, options: ValidateOptions) -> FloeResult<()> {
31 let config_base = config::ConfigBase::local_from_path(config_path);
32 validate_with_base(config_path, config_base, options)
33}
34
35pub fn validate_with_base(
36 config_path: &Path,
37 _config_base: config::ConfigBase,
38 options: ValidateOptions,
39) -> FloeResult<()> {
40 let config = config::parse_config(config_path)?;
41 config::validate_config(&config)?;
42
43 if !options.entities.is_empty() {
44 run::validate_entities(&config, &options.entities)?;
45 }
46
47 Ok(())
48}
49
50pub fn load_config(config_path: &Path) -> FloeResult<config::RootConfig> {
51 config::parse_config(config_path)
52}
53
54pub fn validate_config_for_tests(config: &config::RootConfig) -> FloeResult<()> {
55 config::validate_config(config)
56}