pub struct Loader {
pub stream: String,
pub haserrors: bool,
}
impl Loader {
pub fn new(stream: impl Into<String>) -> Self {
Self {
stream: stream.into(),
haserrors: false, }
}
pub fn echoerr(&mut self, msg: &str) {
eprintln!("powerline-lint: {}", msg);
self.haserrors = true;
}
pub fn get_single_data(&mut self) -> Option<serde_json::Value> {
match serde_json::from_str(&self.stream) {
Ok(v) => Some(v),
Err(e) => {
self.echoerr(&format!("JSON parse error: {}", e));
None
}
}
}
pub fn dispose(&mut self) {
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn new_loader_has_no_errors() {
let l = Loader::new("{}");
assert!(!l.haserrors);
assert_eq!(l.stream, "{}");
}
#[test]
fn get_single_data_parses_valid_json() {
let mut l = Loader::new(r#"{"a": 1}"#);
let v = l.get_single_data().unwrap();
assert_eq!(v["a"], 1);
assert!(!l.haserrors);
}
#[test]
fn get_single_data_flips_haserrors_on_bad_json() {
let mut l = Loader::new("{ this isn't json");
let v = l.get_single_data();
assert!(v.is_none());
assert!(l.haserrors);
}
#[test]
fn echoerr_sets_haserrors() {
let mut l = Loader::new("");
l.echoerr("test error");
assert!(l.haserrors);
}
#[test]
fn dispose_does_not_panic() {
let mut l = Loader::new("{}");
l.dispose();
}
}