miki 0.0.1

just a placeholder
Documentation
#[derive(Debug)]
pub enum LiteralKind<'a> {
    String(Context<'a>),
    Number(Context<'a>),
    True(Context<'a>),
    False(Context<'a>),
    Null(Context<'a>),
}

#[derive(Debug)]
pub enum IdentifierKind<'a> {
    String(Context<'a>),
}

#[derive(Debug)]
pub enum DelimiterKind<'a> {
    ObjectPrec(Context<'a>),
    ObjectTerm(Context<'a>),
    ArrayPrec(Context<'a>),
    ArrayTerm(Context<'a>),
}

#[derive(Debug)]
pub enum TokenKind<'a> {
    Identifier(IdentifierKind<'a>),
    Literal(LiteralKind<'a>),
    Delimiter(DelimiterKind<'a>),
}

#[derive(Debug)]
pub struct Position {
    l: usize,
    c: usize,
    i: usize,
}

impl<'a> Position {
    #[inline]
    pub fn new(l: usize, c: usize, i: usize) -> Position {
        Position { l, c, i }
    }

    #[inline]
    pub fn line(&'a self) -> usize {
        self.l
    }

    #[inline]
    pub fn column(&'a self) -> usize {
        self.c
    }

    #[inline]
    pub fn index(&'a self) -> usize {
        self.i
    }
}

#[derive(Debug)]
pub struct Location {
    s: Position,
    e: Position,
}

impl<'a> Location {
    #[inline]
    pub fn new(s: Position, e: Position) -> Location {
        Location { s, e }
    }

    #[inline]
    pub fn start(&'a self) -> &'a Position {
        &self.s
    }

    #[inline]
    pub fn end(&'a self) -> &'a Position {
        &self.e
    }
}

#[derive(Debug)]
pub struct Context<'a> {
    l: Location,
    b: &'a [u8],
}

impl<'a> Context<'a> {
    #[inline]
    pub fn new(l: Location, b: &'a [u8]) -> Context<'a> {
        Context { l, b }
    }

    #[inline]
    pub fn bytes(&'a self) -> &'a [u8] {
        self.b
    }

    #[inline]
    pub fn location(&'a self) -> &'a Location {
        &self.l
    }
}