Sha256: cd9032fe2c6dcf41050b3a59b9fb98eb9700a29bbe2fa011ee2854014c1666b7

Contents?: true

Size: 1.09 KB

Versions: 39

Compression:

Stored size: 1.09 KB

Contents

use proc_macro2::Span;
use syn::parse::{Error, Parse, ParseStream, Result};
use syn::{Attribute, ItemImpl, ItemTrait, Token};

pub enum Item {
    Trait(ItemTrait),
    Impl(ItemImpl),
}

impl Parse for Item {
    fn parse(input: ParseStream) -> Result<Self> {
        let attrs = input.call(Attribute::parse_outer)?;
        let mut lookahead = input.lookahead1();
        if lookahead.peek(Token![unsafe]) {
            let ahead = input.fork();
            ahead.parse::<Token![unsafe]>()?;
            lookahead = ahead.lookahead1();
        }
        if lookahead.peek(Token![pub]) || lookahead.peek(Token![trait]) {
            let mut item: ItemTrait = input.parse()?;
            item.attrs = attrs;
            Ok(Item::Trait(item))
        } else if lookahead.peek(Token![impl]) {
            let mut item: ItemImpl = input.parse()?;
            if item.trait_.is_none() {
                return Err(Error::new(Span::call_site(), "expected a trait impl"));
            }
            item.attrs = attrs;
            Ok(Item::Impl(item))
        } else {
            Err(lookahead.error())
        }
    }
}

Version data entries

39 entries across 39 versions & 1 rubygems

Version Path
wasmtime-30.0.2 ./ext/cargo-vendor/async-trait-0.1.86/src/parse.rs
wasmtime-29.0.0 ./ext/cargo-vendor/async-trait-0.1.85/src/parse.rs
wasmtime-28.0.0 ./ext/cargo-vendor/async-trait-0.1.85/src/parse.rs
wasmtime-27.0.0 ./ext/cargo-vendor/async-trait-0.1.83/src/parse.rs
wasmtime-26.0.0 ./ext/cargo-vendor/async-trait-0.1.83/src/parse.rs
wasmtime-25.0.2 ./ext/cargo-vendor/async-trait-0.1.81/src/parse.rs
wasmtime-25.0.1 ./ext/cargo-vendor/async-trait-0.1.81/src/parse.rs
wasmtime-25.0.0 ./ext/cargo-vendor/async-trait-0.1.81/src/parse.rs
wasmtime-24.0.0 ./ext/cargo-vendor/async-trait-0.1.81/src/parse.rs
wasmtime-23.0.2 ./ext/cargo-vendor/async-trait-0.1.77/src/parse.rs
wasmtime-22.0.0 ./ext/cargo-vendor/async-trait-0.1.77/src/parse.rs
wasmtime-21.0.1 ./ext/cargo-vendor/async-trait-0.1.77/src/parse.rs
wasmtime-20.0.2 ./ext/cargo-vendor/async-trait-0.1.77/src/parse.rs
wasmtime-20.0.0 ./ext/cargo-vendor/async-trait-0.1.77/src/parse.rs
wasmtime-18.0.3 ./ext/cargo-vendor/async-trait-0.1.77/src/parse.rs
wasmtime-17.0.1 ./ext/cargo-vendor/async-trait-0.1.77/src/parse.rs
wasmtime-17.0.0 ./ext/cargo-vendor/async-trait-0.1.77/src/parse.rs
wasmtime-16.0.0 ./ext/cargo-vendor/async-trait-0.1.77/src/parse.rs
wasmtime-15.0.1 ./ext/cargo-vendor/async-trait-0.1.77/src/parse.rs
wasmtime-15.0.0 ./ext/cargo-vendor/async-trait-0.1.77/src/parse.rs