wxml-parser-rs 0.0.2

Core WXML parser implemented in Rust
Documentation
#[derive(Clone, Copy, Debug)]
pub struct Span {
  pub start_idx: usize,
  pub end_idx: usize,
  pub start_line: usize,
  pub start_col: usize,
  pub end_line: usize,
  pub end_col: usize,
}

#[derive(Clone, Debug)]
pub struct ParseErrorIr {
  pub typ: &'static str,
  pub raw_type: Option<&'static str>,
  pub value: String,
  pub span: Span,
}

#[derive(Clone, Copy, Debug)]
#[allow(dead_code)]
pub struct LocIr {
  pub start_line: usize,
  pub start_col: usize,
  pub end_line: usize,
  pub end_col: usize,
}

#[derive(Clone, Copy, Debug)]
pub struct InterpolationIr<'a> {
  pub typ: &'a str,
  pub raw_value: &'a str,
  pub value: &'a str,
  pub span: Span,
}

#[derive(Clone, Debug)]
pub struct AttributeIr<'a> {
  pub key: &'a str,
  pub quote: Option<&'a str>,
  pub value: Option<String>,
  pub raw_value: Option<String>,
  pub children: Vec<NodeIr<'a>>,
  pub interpolations: Vec<InterpolationIr<'a>>,
  pub span: Span,
}

#[derive(Clone, Debug)]
pub struct StartTagIr<'a> {
  pub name: &'a str,
  pub attributes: Vec<AttributeIr<'a>>,
  pub self_closing: bool,
  pub span: Span,
}

#[derive(Clone, Debug)]
pub struct EndTagIr<'a> {
  pub name: &'a str,
  pub span: Span,
}

#[derive(Clone, Debug)]
pub struct ScriptErrorIr {
  pub value: String,
  pub span: Span,
  pub line: usize,
  pub column: usize,
}

#[derive(Clone, Debug)]
pub struct ScriptNodeIr<'a> {
  pub name: &'static str,
  pub value: Option<&'a str>,
  pub start_tag: Option<StartTagIr<'a>>,
  pub end_tag: Option<EndTagIr<'a>>,
  pub body: Option<ScriptProgramIr>,
  pub error: Option<ScriptErrorIr>,
  pub span: Span,
}

#[derive(Clone, Debug)]
pub enum NodeIr<'a> {
  Text { value: &'a str, span: Span },
  Comment { value: &'a str, span: Span },
  Interpolation(InterpolationIr<'a>),
  Element {
    name: &'a str,
    children: Vec<NodeIr<'a>>,
    start_tag: Option<StartTagIr<'a>>,
    end_tag: Option<EndTagIr<'a>>,
    span: Span,
  },
  Script(ScriptNodeIr<'a>),
}

#[derive(Clone, Debug)]
pub struct ParsedProgram<'a> {
  pub body: Vec<NodeIr<'a>>,
  pub comment_indices: Vec<usize>,
  pub errors: Vec<ParseErrorIr>,
  pub end_line: usize,
  pub end_col: usize,
  pub code_len: usize,
}

#[derive(Clone, Debug)]
pub struct ScriptLocIr {
  pub start_line: usize,
  pub start_col: usize,
  pub end_line: usize,
  pub end_col: usize,
}

#[derive(Clone, Debug)]
pub enum ScriptBodyIr {
  MemberExpression { loc: ScriptLocIr },
}

#[derive(Clone, Debug)]
pub struct ScriptCommentIr {
  pub typ: String,
  pub loc: ScriptLocIr,
}

#[derive(Clone, Debug)]
pub struct ScriptProgramIr {
  pub body: Vec<ScriptBodyIr>,
  pub comments: Vec<ScriptCommentIr>,
  pub loc: ScriptLocIr,
}