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