utterance 0.1.2

A parser library for creating readable, natural-language-inspired domain-specific languages.
Documentation
use smallvec::SmallVec;

use super::Span;

pub(crate) type Highlights<const H: usize> = SmallVec<Highlight, H>;

#[repr(C)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct Highlight {
    kind: HighlightKind,
    span: Span,
}

impl Highlight {
    pub(crate) fn new(kind: HighlightKind, span: Span) -> Self {
        Self { kind, span }
    }

    pub fn kind(&self) -> &HighlightKind {
        &self.kind
    }

    pub fn span(&self) -> Span {
        self.span
    }
}

#[repr(C)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum HighlightKind {
    None = 0,
    Word = 1,
    Keyword = 2,
    Number = 3,
    Concept = 4,
    Comment = 5,
    Error = 6,
    Noop = 7,
}