use super::super::data::*;
use {
depiction::*,
kutil::std::iter::*,
std::{fmt, io},
thiserror::*,
};
#[derive(Debug, Error)]
pub struct InvalidValueError {
pub id: ID,
pub path: Vec<String>,
}
impl InvalidValueError {
pub fn new(id: ID, path: Vec<String>) -> Self {
Self { id, path }
}
}
impl Depict for InvalidValueError {
fn depict<WriteT>(&self, writer: &mut WriteT, context: &DepictionContext) -> io::Result<()>
where
WriteT: io::Write,
{
context.separate(writer)?;
if !self.path.is_empty() {
for (segment, last) in IterateWithLast::new(&self.path) {
context.theme.write_meta(writer, segment)?;
if !last {
context.theme.write_delimiter(writer, '.')?;
}
}
} else {
context.theme.write_meta(writer, "no path")?;
}
context.indent_into_branch(writer, true)?;
context.theme.write_error(writer, "invalid value")
}
}
impl fmt::Display for InvalidValueError {
fn fmt(&self, formatter: &mut fmt::Formatter<'_>) -> fmt::Result {
if !self.path.is_empty() {
write!(formatter, "ID: {}, path: {}", self.id, self.path.join("."))
} else {
write!(formatter, "ID: {}", self.id)
}
}
}