Trait rune::Parse[][src]

pub trait Parse where
    Self: Sized
{ fn parse(p: &mut Parser<'_>) -> Result<Self, ParseError>; }

The parse trait, implemented by items that can be parsed.

Required methods

fn parse(p: &mut Parser<'_>) -> Result<Self, ParseError>[src]

Parse the current item from the parser.

Loading content...

Implementations on Foreign Types

impl<A, B> Parse for (A, B) where
    A: Parse + Peek,
    B: Parse
[src]

impl<T> Parse for Option<T> where
    T: Parse + Peek
[src]

Parse implementation for something that can be optionally parsed.

impl<T> Parse for Box<T> where
    T: Parse
[src]

Parse implementation for something that is boxed.

impl<T> Parse for Vec<T> where
    T: Parse + Peek
[src]

Parser implementation for a vector.

Loading content...

Implementors

impl Parse for Condition[src]

Parse a condition.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::Condition>("true");
testing::roundtrip::<ast::Condition>("let [a, ..] = v");

impl Parse for Expr[src]

Parsing a block expression.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::Expr>("()");
testing::roundtrip::<ast::Expr>("foo[\"foo\"]");
testing::roundtrip::<ast::Expr>("foo.bar()");
testing::roundtrip::<ast::Expr>("var()");
testing::roundtrip::<ast::Expr>("var");
testing::roundtrip::<ast::Expr>("42");
testing::roundtrip::<ast::Expr>("1 + 2 / 3 - 4 * 1");
testing::roundtrip::<ast::Expr>("foo[\"bar\"]");
testing::roundtrip::<ast::Expr>("let var = 42");
testing::roundtrip::<ast::Expr>("let var = \"foo bar\"");
testing::roundtrip::<ast::Expr>("var[\"foo\"] = \"bar\"");
testing::roundtrip::<ast::Expr>("let var = objects[\"foo\"] + 1");
testing::roundtrip::<ast::Expr>("var = 42");

let expr = testing::roundtrip::<ast::Expr>(r#"
    if 1 { } else { if 2 { } else { } }
"#);
assert!(matches!(expr, ast::Expr::If(..)));

// Chained function calls.
testing::roundtrip::<ast::Expr>("foo.bar.baz()");
testing::roundtrip::<ast::Expr>("foo[0][1][2]");
testing::roundtrip::<ast::Expr>("foo.bar()[0].baz()[1]");

testing::roundtrip::<ast::Expr>("42 is int::int");
testing::roundtrip::<ast::Expr>("{ let x = 1; x }");

let expr = testing::roundtrip::<ast::Expr>("#[cfg(debug_assertions)] { assert_eq(x, 32); }");
assert!(matches!(expr, ast::Expr::Block(b) if b.attributes.len() == 1 && b.block.statements.len() == 1));

testing::roundtrip::<ast::Expr>("#{\"foo\": b\"bar\"}");
testing::roundtrip::<ast::Expr>("Disco {\"never_died\": true }");
testing::roundtrip::<ast::Expr>("(false, 1, 'n')");
testing::roundtrip::<ast::Expr>("[false, 1, 'b']");

impl Parse for ExprBreakValue[src]

impl Parse for ExprRangeLimits[src]

impl Parse for ExprSelectBranch[src]

impl Parse for FnArg[src]

impl Parse for Item[src]

impl Parse for ItemModBody[src]

impl Parse for ItemOrExpr[src]

impl Parse for ItemStructBody[src]

Parse implementation for a struct body.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::ItemStructBody>("");

testing::roundtrip::<ast::ItemStructBody>("{ a, b, c }");
testing::roundtrip::<ast::ItemStructBody>("{ #[x] a, #[y] b, #[z] #[w] #[f32] c }");
testing::roundtrip::<ast::ItemStructBody>("{ a, #[attribute] b, c }");

testing::roundtrip::<ast::ItemStructBody>("( a, b, c )");
testing::roundtrip::<ast::ItemStructBody>("( #[x] a, b, c )");
testing::roundtrip::<ast::ItemStructBody>("( #[x] pub a, b, c )");
testing::roundtrip::<ast::ItemStructBody>("( a, b, c )");
testing::roundtrip::<ast::ItemStructBody>("()");

impl Parse for ItemUseSegment[src]

impl Parse for ItemVariantBody[src]

Parse implementation for a struct body.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::ItemVariantBody>("( a, b, c )");
testing::roundtrip::<ast::ItemVariantBody>("{ a, b, c }");
testing::roundtrip::<ast::ItemVariantBody>("( #[serde(default)] a, b, c )");
testing::roundtrip::<ast::ItemVariantBody>("{ a, #[debug(skip)] b, c }");

impl Parse for Lit[src]

Parsing a Lit

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::Lit>("true");
testing::roundtrip::<ast::Lit>("false");
testing::roundtrip::<ast::Lit>("'🔥'");
testing::roundtrip::<ast::Lit>("b'4'");
testing::roundtrip::<ast::Lit>("b\"bytes\"");
testing::roundtrip::<ast::Lit>("1.2");
testing::roundtrip::<ast::Lit>("42");
testing::roundtrip::<ast::Lit>("\"mary had a little lamb\"");

impl Parse for ObjectIdent[src]

impl Parse for ObjectKey[src]

Parse an object literal.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::ObjectKey>("foo");
testing::roundtrip::<ast::ObjectKey>("\"foo \\n bar\"");

impl Parse for Pat[src]

Parsing a block expression.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::Pat>("()");
testing::roundtrip::<ast::Pat>("42");
testing::roundtrip::<ast::Pat>("-42");
testing::roundtrip::<ast::Pat>("3.1415");
testing::roundtrip::<ast::Pat>("-3.1415");
testing::roundtrip::<ast::Pat>("b'a'");
testing::roundtrip::<ast::Pat>("'a'");
testing::roundtrip::<ast::Pat>("b\"hello world\"");
testing::roundtrip::<ast::Pat>("\"hello world\"");
testing::roundtrip::<ast::Pat>("var");
testing::roundtrip::<ast::Pat>("_");
testing::roundtrip::<ast::Pat>("Foo(n)");

impl Parse for PathSegment[src]

impl Parse for Stmt[src]

impl Parse for Visibility[src]

Parsing Visibility specifiers

Examples

use rune::{testing, ast};

assert!(matches!{
    testing::roundtrip::<ast::Visibility>("pub"),
    ast::Visibility::Public(_)
});

assert!(matches!{
    testing::roundtrip::<ast::Visibility>("pub (in a::b::c)"),
    ast::Visibility::In(_)
});

assert!(matches!{
    testing::roundtrip::<ast::Visibility>("pub(in crate::x::y::z)"),
    ast::Visibility::In(_)
});

assert!(matches!{
    testing::roundtrip::<ast::Visibility>("pub(super)"),
    ast::Visibility::Super(_)
});

assert!(matches!{
    testing::roundtrip::<ast::Visibility>("pub(crate)"),
    ast::Visibility::Crate(_)
});

assert!(matches!{
    testing::roundtrip::<ast::Visibility>("pub(self)"),
    ast::Visibility::SelfValue(_)
});

impl Parse for Abstract[src]

impl Parse for AlignOf[src]

impl Parse for Amp[src]

impl Parse for AmpAmp[src]

impl Parse for AmpEq[src]

impl Parse for Arrow[src]

impl Parse for As[src]

impl Parse for Async[src]

impl Parse for At[src]

impl Parse for Await[src]

impl Parse for Bang[src]

impl Parse for BangEq[src]

impl Parse for Become[src]

impl Parse for Break[src]

impl Parse for Caret[src]

impl Parse for CaretEq[src]

impl Parse for Colon[src]

impl Parse for ColonColon[src]

impl Parse for Comma[src]

impl Parse for Const[src]

impl Parse for Continue[src]

impl Parse for Crate[src]

impl Parse for Dash[src]

impl Parse for DashEq[src]

impl Parse for Default[src]

impl Parse for Div[src]

impl Parse for Do[src]

impl Parse for Dollar[src]

impl Parse for Dot[src]

impl Parse for DotDot[src]

impl Parse for DotDotEq[src]

impl Parse for Else[src]

impl Parse for Enum[src]

impl Parse for Eq[src]

impl Parse for EqEq[src]

impl Parse for Extern[src]

impl Parse for False[src]

impl Parse for Final[src]

impl Parse for Fn[src]

impl Parse for For[src]

impl Parse for Gt[src]

impl Parse for GtEq[src]

impl Parse for GtGt[src]

impl Parse for GtGtEq[src]

impl Parse for If[src]

impl Parse for Impl[src]

impl Parse for In[src]

impl Parse for Is[src]

impl Parse for Let[src]

impl Parse for Loop[src]

impl Parse for Lt[src]

impl Parse for LtEq[src]

impl Parse for LtLt[src]

impl Parse for LtLtEq[src]

impl Parse for Macro[src]

impl Parse for Match[src]

impl Parse for Mod[src]

impl Parse for Move[src]

impl Parse for Not[src]

impl Parse for OffsetOf[src]

impl Parse for Override[src]

impl Parse for Perc[src]

impl Parse for PercEq[src]

impl Parse for Pipe[src]

impl Parse for PipeEq[src]

impl Parse for PipePipe[src]

impl Parse for Plus[src]

impl Parse for PlusEq[src]

impl Parse for Pound[src]

impl Parse for Priv[src]

impl Parse for Proc[src]

impl Parse for Pub[src]

impl Parse for Pure[src]

impl Parse for QuestionMark[src]

impl Parse for Ref[src]

impl Parse for Return[src]

impl Parse for Rocket[src]

impl Parse for Select[src]

impl Parse for SelfType[src]

impl Parse for SelfValue[src]

impl Parse for SemiColon[src]

impl Parse for SizeOf[src]

impl Parse for SlashEq[src]

impl Parse for Star[src]

impl Parse for StarEq[src]

impl Parse for Static[src]

impl Parse for Struct[src]

impl Parse for Super[src]

impl Parse for Tilde[src]

impl Parse for True[src]

impl Parse for TypeOf[src]

impl Parse for Underscore[src]

impl Parse for Unsafe[src]

impl Parse for Use[src]

impl Parse for Virtual[src]

impl Parse for While[src]

impl Parse for Yield[src]

impl Parse for Attribute[src]

Parsing an Attribute

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::Attribute>("#[foo = \"foo\"]");
testing::roundtrip::<ast::Attribute>("#[foo()]");
testing::roundtrip::<ast::Attribute>("#![foo]");
testing::roundtrip::<ast::Attribute>("#![cfg(all(feature = \"potato\"))]");
testing::roundtrip::<ast::Attribute>("#[x+1]");

impl Parse for Block[src]

Parse implementation for a block.

Examples

use rune::{testing, ast};

let block = testing::roundtrip::<ast::Block>("{}");
assert_eq!(block.statements.len(), 0);
assert!(block.produces_nothing());

let block = testing::roundtrip::<ast::Block>("{ foo }");
assert_eq!(block.statements.len(), 1);
assert!(!block.produces_nothing());

let block = testing::roundtrip::<ast::Block>("{ foo; }");
assert_eq!(block.statements.len(), 1);
assert!(block.produces_nothing());

let block = testing::roundtrip::<ast::Block>(r#"
    {
        let foo = 42;
        let bar = "string";
        baz
    }
"#);

assert_eq!(block.statements.len(), 3);

impl Parse for CloseBrace[src]

impl Parse for CloseBracket[src]

impl Parse for CloseParen[src]

impl Parse for ExprAssign[src]

impl Parse for ExprAwait[src]

impl Parse for ExprBinary[src]

impl Parse for ExprBlock[src]

impl Parse for ExprBreak[src]

impl Parse for ExprCall[src]

impl Parse for ExprClosure[src]

impl Parse for ExprContinue[src]

impl Parse for ExprElse[src]

impl Parse for ExprElseIf[src]

impl Parse for ExprFieldAccess[src]

impl Parse for ExprFor[src]

impl Parse for ExprGroup[src]

impl Parse for ExprIf[src]

impl Parse for ExprIndex[src]

impl Parse for ExprLet[src]

impl Parse for ExprLit[src]

impl Parse for ExprLoop[src]

impl Parse for ExprMatch[src]

impl Parse for ExprMatchBranch[src]

impl Parse for ExprObject[src]

impl Parse for ExprRange[src]

impl Parse for ExprReturn[src]

impl Parse for ExprSelect[src]

impl Parse for ExprTry[src]

impl Parse for ExprTuple[src]

impl Parse for ExprUnary[src]

impl Parse for ExprVec[src]

impl Parse for ExprWhile[src]

impl Parse for ExprWithoutBinary[src]

impl Parse for ExprYield[src]

impl Parse for Field[src]

impl Parse for FieldAssign[src]

Parse an object literal.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::FieldAssign>("\"foo\": 42");
testing::roundtrip::<ast::FieldAssign>("\"foo\": 42");
testing::roundtrip::<ast::FieldAssign>("\"foo\": 42");

impl Parse for File[src]

Parse a file.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::File>(r#"
use foo;

fn foo() {
    42
}

use bar;

fn bar(a, b) {
    a
}
"#);

Realistic Example

use rune::{testing, ast};

testing::roundtrip::<ast::File>(r#"
use http;

fn main() {
    let client = http::client();
    let response = client.get("https://google.com");
    let text = response.text();
}
"#);

File Attributes Example

use rune::{testing, ast};

testing::roundtrip::<ast::File>(r#"
// NB: Attributes are currently rejected by the compiler
#![feature(attributes)]

fn main() {
    for x in [1,2,3,4,5,6] {
        println(`{x}`)
    }
}
"#);

impl Parse for Ident[src]

impl Parse for ItemConst[src]

impl Parse for ItemEnum[src]

impl Parse for ItemFn[src]

impl Parse for ItemImpl[src]

impl Parse for ItemMod[src]

impl Parse for ItemStruct[src]

impl Parse for ItemUse[src]

impl Parse for ItemUsePath[src]

impl Parse for ItemVariant[src]

impl Parse for Label[src]

impl Parse for LitBool[src]

Parsing a unit literal

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::LitBool>("true");
testing::roundtrip::<ast::LitBool>("false");

impl Parse for LitByte[src]

Parse a byte literal.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::LitByte>("b'a'");
testing::roundtrip::<ast::LitByte>("b'\\0'");
testing::roundtrip::<ast::LitByte>("b'\\n'");
testing::roundtrip::<ast::LitByte>("b'\\r'");
testing::roundtrip::<ast::LitByte>("b'\\\\''");

impl Parse for LitByteStr[src]

Parse a string literal.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::LitByteStr>("b\"hello world\"");
testing::roundtrip::<ast::LitByteStr>("b\"hello\\nworld\"");

impl Parse for LitChar[src]

Parse a character literal.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::LitChar>("'a'");
testing::roundtrip::<ast::LitChar>("'\\0'");
testing::roundtrip::<ast::LitChar>("'\\n'");
testing::roundtrip::<ast::LitChar>("'\\r'");
testing::roundtrip::<ast::LitChar>("'\\''");

impl Parse for LitNumber[src]

Parse a number literal.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::LitNumber>("42");
testing::roundtrip::<ast::LitNumber>("42.42");
testing::roundtrip::<ast::LitNumber>("0.42");
testing::roundtrip::<ast::LitNumber>("0.42e10");

impl Parse for LitStr[src]

Parse a string literal.

Examples

use rune::{testing, ast};

testing::roundtrip::<ast::LitStr>("\"hello world\"");
testing::roundtrip::<ast::LitStr>("\"hello\\nworld\"");

impl Parse for Local[src]

impl Parse for MacroCall[src]

impl Parse for OpenBrace[src]

impl Parse for OpenBracket[src]

impl Parse for OpenParen[src]

impl Parse for PatBinding[src]

impl Parse for Path[src]

impl Parse for FormatArgs[src]

fn parse(p: &mut Parser<'_>) -> Result<Self, ParseError>[src]

Parse format arguments inside of a macro.

impl<T, S> Parse for AngleBracketed<T, S> where
    T: Parse,
    S: Peek + Parse
[src]

impl<T, S> Parse for Braced<T, S> where
    T: Parse,
    S: Peek + Parse
[src]

impl<T, S> Parse for Bracketed<T, S> where
    T: Parse,
    S: Peek + Parse
[src]

impl<T, S> Parse for Parenthesized<T, S> where
    T: Parse,
    S: Peek + Parse
[src]

Loading content...