pub mod composer;
pub mod constructor;
pub mod error;
pub mod events;
pub mod loader;
pub mod markedvalue;
pub mod nodes;
pub mod parser;
pub mod reader;
pub mod resolver;
pub mod scanner;
pub mod tokens;
use crate::ported::lib::config::load_json_config;
use serde_json::Value;
use std::path::Path;
pub fn load<P: AsRef<Path>>(stream: P) -> (Option<Value>, bool) {
match load_json_config(stream) {
Ok(v) => (Some(v), false),
Err(_) => (None, true),
}
}
#[cfg(test)]
mod tests {
use super::*;
use std::io::Write;
fn tmp_json(content: &str) -> std::path::PathBuf {
use std::sync::atomic::{AtomicU64, Ordering};
static COUNTER: AtomicU64 = AtomicU64::new(0);
let mut p = std::env::temp_dir();
p.push(format!(
"powerliners-markedjson-test-{}-{}-{}.json",
std::process::id(),
std::time::SystemTime::now()
.duration_since(std::time::UNIX_EPOCH)
.unwrap()
.as_nanos(),
COUNTER.fetch_add(1, Ordering::SeqCst)
));
let mut f = std::fs::File::create(&p).unwrap();
f.write_all(content.as_bytes()).unwrap();
p
}
#[test]
fn load_returns_value_and_no_error() {
let p = tmp_json(r#"{"a": 1}"#);
let (v, err) = load(&p);
assert!(!err);
assert!(v.is_some());
assert_eq!(v.unwrap()["a"], 1);
std::fs::remove_file(&p).ok();
}
#[test]
fn load_reports_error_on_bad_json() {
let p = tmp_json(r#"{ this isn't json"#);
let (v, err) = load(&p);
assert!(err);
assert!(v.is_none());
std::fs::remove_file(&p).ok();
}
}