Skip to main content

floe_core/
lib.rs

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}