#![warn(missing_docs)]
use vld::error::{PathSegment, VldError};
pub mod db;
pub mod form;
pub fn format_path(path: &[PathSegment]) -> String {
let mut out = String::new();
for seg in path {
match seg {
PathSegment::Field(name) => {
if !out.is_empty() {
out.push('.');
}
out.push_str(name);
}
PathSegment::Index(idx) => {
out.push('[');
out.push_str(&idx.to_string());
out.push(']');
}
}
}
out
}
pub fn flatten_issues(err: &VldError) -> Vec<(String, String)> {
err.issues
.iter()
.map(|i| (format_path(&i.path), i.message.clone()))
.collect()
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn format_path_has_no_leading_dot() {
let p = vec![
PathSegment::Field("user".into()),
PathSegment::Field("email".into()),
];
assert_eq!(format_path(&p), "user.email");
assert_eq!(format_path(&[PathSegment::Index(2)]), "[2]");
assert_eq!(format_path(&[]), "");
}
}