use super::{Bound, E0277, Item};
grammar;
Ident: &'input str = r"\w+";
Name: Vec<&'input str> = {
<i:Ident> => vec![i],
<qualifier:Ident> "::" <mut name:Name> => {
name.push(qualifier);
name
},
};
Bound: Bound<'input> = {
r"'\w+" => Bound::Lifetime(<>),
Item => Bound::Item(<>),
"&" <lifetime:r"'\w+"> "mut" <item:Item> => Bound::Reference{
lifetime,
mut_: true,
item,
},
"&" <lifetime:r"'\w+"> <item:Item> => Bound::Reference{
lifetime,
mut_: false,
item,
},
"(" <CommaSep<Bound>> ")" => Bound::Tuple(<>),
}
pub Item: Item<'input> = {
<name:Name> => Item {
name,
generic_bounds: Vec::new(),
},
<name:Name> "<" <generic_bounds:CommaSep<Bound>> ">" => Item { <> },
};
// error[E0277]: the trait bound `Arc<sc_service::client::Client<sc_client_db::Backend<sp_runtime::generic::Block<sp_runtime::generic::Header<u32, BlakeTwo256>, OpaqueExtrinsic>>, LocalCallExecutor<sc_client_db::Backend<sp_runtime::generic::Block<sp_runtime::generic::Header<u32, BlakeTwo256>, OpaqueExtrinsic>>, NativeExecutor<Executor>>, sp_runtime::generic::Block<sp_runtime::generic::Header<u32, BlakeTwo256>, OpaqueExtrinsic>, RuntimeApi>>: HeaderBackend<sp_runtime::generic::Block<sp_runtime::generic::Header<u32, BlakeTwo256>, OpaqueExtrinsic>>` is not satisfied
pub E0277: E0277<'input> = {
"error[E0277]: the trait bound `" <item:Item> ":" <trait_bound:Item> "` is not satisfied" => E0277 { <> }
};
// CommaSep requires internal commas only, no trailing
CommaSep<T>: Vec<T> = {
T => vec![<>],
<mut head:CommaSep<T>> "," <tail:T> => {
head.push(tail);
head
}
}