adnv 1.5.0

CLI that tracks, checks and auto-updates infrastructure dependency versions across Terraform, Helm, Docker, Git and npm
Documentation
use std::{cmp, ops};

use pest::{RuleType, Span, iterators::Pair};

#[derive(Debug, Clone, Copy)]
pub struct Spanned<'i, T>(Span<'i>, T);

impl<'i, T> Spanned<'i, T> {
    pub fn new(span: Span<'i>, value: impl Into<T>) -> Spanned<'i, T> {
        Spanned(span, value.into())
    }

    pub fn span(&self) -> Span<'i> {
        self.0
    }

    pub fn value(&self) -> &T {
        &self.1
    }

    pub fn into_value(self) -> T {
        self.1
    }

    pub fn into_pair(self) -> (Span<'i>, T) {
        (self.0, self.1)
    }

    pub fn as_ref(&self) -> Spanned<'i, &T> {
        Spanned(self.0, &self.1)
    }
}

impl<'i, R: RuleType> From<Pair<'i, R>> for Spanned<'i, &'i str> {
    fn from(pair: Pair<'i, R>) -> Self {
        Spanned(pair.as_span(), pair.as_str())
    }
}

impl<'i, T: ops::Deref> Spanned<'i, T> {
    pub fn as_deref(&self) -> Spanned<'i, &T::Target> {
        Spanned(self.0, &*self.1)
    }
}

impl<T> ops::Deref for Spanned<'_, T> {
    type Target = T;

    #[inline]
    fn deref(&self) -> &Self::Target {
        self.value()
    }
}

impl<T: cmp::PartialEq<T>> cmp::PartialEq<T> for Spanned<'_, T> {
    #[inline]
    fn eq(&self, other: &T) -> bool {
        self.value().eq(other)
    }
}