pub mod vue;
use vize_l0::{Allocator, Span, Vec};
pub use vue::Vue;
pub trait ContainerFormat {
fn split<'a>(&self, allocator: &'a Allocator, source: &'a str) -> Container<'a>;
}
#[derive(Debug)]
pub struct Container<'a> {
pub source: &'a str,
pub blocks: Vec<'a, Block<'a>>,
pub errors: Vec<'a, ContainerError>,
}
#[derive(Debug)]
pub struct Block<'a> {
pub name: &'a str,
pub open_tag: Span,
pub attrs: Vec<'a, BlockAttr<'a>>,
pub content: Span,
pub close_tag: Option<Span>,
}
impl<'a> Block<'a> {
pub fn attr(&self, name: &str) -> Option<&BlockAttr<'a>> {
self.attrs.iter().find(|attr| attr.name == name)
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct BlockAttr<'a> {
pub name: &'a str,
pub value: Option<&'a str>,
pub span: Span,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ContainerError {
pub code: ContainerErrorCode,
pub offset: u32,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ContainerErrorCode {
SourceTooLarge,
UncertainInterpolation,
UnterminatedOpenTag,
MissingCloseTag,
DuplicateBlock,
}