use miette::SourceSpan;
use nonempty::NonEmpty;
use crate::{DeserializeErrors, DeserializeValue, Key, Value};
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
pub struct Spanned<T> {
pub span: SourceSpan,
pub value: T,
}
impl<'de, T: DeserializeValue<'de>> DeserializeValue<'de> for Spanned<T> {
type Error = T::Error;
fn deserialize_value<'k>(
key: Key<'k>,
value: Value<'de>,
) -> Result<Self, DeserializeErrors<Self, NonEmpty<Self::Error>>> {
let span = value.span().into();
T::deserialize_value(key, value)
.map(|value| Spanned { span, value })
.map_err(|err| err.map(|value| Spanned { span, value }))
}
}