xshade-parser 0.1.2

Parser and untyped AST for the xshade language.
Documentation
use ::std::fmt;
use nom::types::CompleteStr;
use nom_locate::LocatedSpan;

type NomSpan<'a> = LocatedSpan<CompleteStr<'a>>;

#[derive(Eq, PartialEq, Copy, Clone, Serialize, Deserialize)]
pub struct Span {
    pub offset: usize,
    pub length: usize,
    pub line: usize,
    pub column: usize,
}

impl Span {
    pub fn new(offset: usize, length: usize, line: usize, column: usize) -> Span {
        Span {
            offset: offset,
            length: length,
            line: line,
            column: column,
        }
    }

    pub fn from_nom_span(span: &NomSpan) -> Span {
        Span {
            offset: span.offset,
            length: span.fragment.len(),
            line: span.line as usize,
            column: span.get_column(),
        }
    }

    pub fn from_to(from: Span, to: Span) -> Span {
        Span {
            offset: from.offset,
            length: to.offset - from.offset + to.length,
            line: from.line,
            column: from.column,
        }
    }
}

impl fmt::Debug for Span {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "Offset {} Lenght {} Line {} Column {}", self.offset, self.length, self.line, self.column)
    }
}

impl fmt::Display for Span {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
        write!(f, "Offset {} Lenght {} Line {} Column {}", self.offset, self.length, self.line, self.column)
    }
}