ox_mf2_parser 0.1.6

High Performance MessageFormat 2 parser core with CST, diagnostics, recovery, semantic lowering, and binary snapshot support.
Documentation

ox_mf2_parser

High performance MessageFormat 2 parser core for the intlify ox-mf2 packages.

This crate parses Unicode MessageFormat 2 messages into a recovering, lossless concrete syntax tree (CST). It also exposes diagnostics, optional semantic lowering, and a Binary AST snapshot format used by the N-API and WASM bindings.

Installation

[dependencies]
ox_mf2_parser = "0.1"

Quick Start

use ox_mf2_parser::parse_message;

let result = parse_message("Hello, {$name}!");

assert!(result.diagnostics.is_empty());
assert!(result.cst.node_count() > 0);

parse_message is the one-shot convenience API. It owns the returned ParseResult, including CST tables and diagnostics.

Diagnostics

Malformed input is parsed with recovery enabled by default. Diagnostics carry stable codes, severity, source spans, and messages.

use ox_mf2_parser::{parse_message, DiagnosticSeverity};

let result = parse_message("Hello, {$name");

assert!(!result.diagnostics.is_empty());
assert_eq!(result.diagnostics[0].severity, DiagnosticSeverity::Error);

Semantic Model

The parser can optionally lower CST data into a semantic model.

use ox_mf2_parser::{parse_source, ParseOptions, SourceFileInput, SourceStore};

let mut sources = SourceStore::new();
let source = sources.add(SourceFileInput {
    source: "Hello, {$name}!",
    path: Some("message.mf2"),
    locale: Some("en"),
    message_id: Some("greeting"),
    base_offset: None,
});

let result = parse_source(
    &sources,
    source,
    ParseOptions {
        parse_semantic: true,
        ..ParseOptions::default()
    },
);

assert!(result.semantic.is_some());

Use parse_source_session with ParseWorkspace when repeated parsing should reuse allocations.

Binary AST Snapshot

The snapshot module encodes parse results into a compact binary format and decodes that format into zero-copy views.

use ox_mf2_parser::{snapshot, ParseOptions};

let snapshot = snapshot::parse_message_to_snapshot(
    "Hello, {$name}!",
    None,
    ParseOptions::default(),
    snapshot::SnapshotOptions::default(),
)
.unwrap();

let view = snapshot::decode_snapshot(&snapshot.bytes).unwrap();
assert_eq!(view.root_count(), 1);

The snapshot format is intended for language bindings, persistence, and cross-process transfer. For in-process Rust usage, prefer ParseResult and CstView.

Relationship to npm packages

This crate is the Rust parser core used by:

  • @intlify/ox-mf2-napi
  • @intlify/ox-mf2-wasm

Most JavaScript users should install one of those npm packages instead of using this crate directly.

Stability

ox_mf2_parser is pre-1.0. Public APIs are documented and intended to be usable, but minor releases may still refine names, shape, and snapshot details while MessageFormat 2 integration work continues.

License

MIT