Expand description
File system configuration loader (fs feature).
- Supported schema:
fsandfile
§Example
use std::{fs, collections::HashMap};
use tempdir::TempDir;
use plugx_config::loader::{Loader, fs::{Fs, SoftErrorsFs}};
use url::Url;
// Create a temporary directory containing `foo.json`, `bar.yaml`, and `baz.toml`:
let tmp_dir = TempDir::new("fs-example").unwrap();
let foo = tmp_dir.path().join("foo.json");
fs::write(&foo, "{\"hello\": \"world\"}").unwrap();
let bar = tmp_dir.path().join("bar.yaml");
fs::write(&bar, "hello: world").unwrap();
let baz = tmp_dir.path().join("baz.toml");
fs::write(&baz, "hello = \"world\"").unwrap();
let url = Url::try_from(format!("file://{}", tmp_dir.path().to_str().unwrap()).as_str()).unwrap();
let mut loader = Fs::new();
// You could set some skippable errors here.
// For example if you're loading contents of one file that may potentially not exists:
// loader.add_skippable_error(SkippbaleErrorKind::NotFound)
// Load all configurations inside directory:
let loaded = loader.load(&url, None, false).unwrap();
assert_eq!(loaded.len(), 3);
let (_, foo) = loaded.iter().find(|(plugin_name, _)| plugin_name == "foo").expect("`foo` plugin config");
assert_eq!(foo.maybe_format(), Some(&"json".to_string()));
let (_, bar) = loaded.iter().find(|(plugin_name, _)| plugin_name == "bar").expect("`bar` plugin config");
assert_eq!(bar.maybe_contents(), Some(&"hello: world".to_string()));
// Only load `foo` and `bar`:
let whitelist = ["foo".into(), "bar".into()].to_vec();
let loaded = loader.load(&url, Some(&whitelist), false).unwrap();
assert_eq!(loaded.len(), 2);
// Load just one file:
let qux = tmp_dir.path().join("qux.env");
fs::write(&qux, "hello=\"world\"").unwrap();
let url = Url::try_from(format!("file://{}", qux.to_str().unwrap()).as_str()).unwrap();
let loaded = loader.load(&url, None, false).unwrap();
assert_eq!(loaded.len(), 1);See loader documentation to known how loaders work.
Structs§
Enums§
- Soft
Errors Fs - Supported soft errors when loading filesystem contents.