oh_my_toml 0.1.0

Awesome TOML configuration derive macro
Documentation
//! While deserializing, allows you to capture a value's span

use miette::SourceSpan;
use nonempty::NonEmpty;

use crate::{DeserializeErrors, DeserializeValue, Key, Value};

/// Capture a value's span in the TOML source file
#[derive(Debug, Clone, Eq, PartialEq, Hash)]
pub struct Spanned<T> {
    /// The span on the value
    pub span: SourceSpan,
    /// Value itself
    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 }))
    }
}