webidl-parser

LICENSE Build Status

A lexer and parser for WebIDL in Rust.

Example

Lexing

```rust use webidl_parser::*;

let lexer = Lexer::new("/* Example taken from emscripten site */\n\ enum EnumClassEnumWithinClass {\n\ \"EnumClass::eval\"\n\ };"); asserteq!(lexer.collect::>(), vec![Ok((41, Token::Enum, 45)), Ok((46, Token::Identifier("EnumClassEnumWithinClass".tostring()), 71)), Ok((72, Token::LeftBrace, 73)), Ok((74, Token::StringLiteral("EnumClass::eval".to_string()), 92)), Ok((93, Token::RightBrace, 94)), Ok((94, Token::Semicolon, 95))]); ```

Parsing

```rust use webidlparser::*; use webidlparser::ast::*;

let result = Parser::parse_string("[Attribute] interface Node { };");

asserteq!(result, Ok(vec![Definition { definitiontype: DefinitionType::Interface(Interface { members: vec![], name: "Node".tostring(), type: InterfaceType::NonPartial(None), }), extendedattributes: vec![ Box::new(ExtendedAttribute::Other { other: Other::Identifier("Attribute".tostring()), rest: None, })], }])); ```