sway_parse/item/
item_abi.rs1use crate::{Parse, ParseBracket, ParseResult, Parser};
2
3use sway_ast::attribute::Annotated;
4use sway_ast::{Braces, ItemAbi, ItemFn, ItemTraitItem};
5
6impl Parse for ItemAbi {
7 fn parse(parser: &mut Parser) -> ParseResult<ItemAbi> {
8 let abi_token = parser.parse()?;
9 let name = parser.parse()?;
10 let super_traits = match parser.take() {
11 Some(colon_token) => {
12 let traits = parser.parse()?;
13 Some((colon_token, traits))
14 }
15 None => None,
16 };
17
18 let abi_items: Braces<Vec<Annotated<ItemTraitItem>>> = parser.parse()?;
19 for annotated in abi_items.get().iter() {
20 #[allow(irrefutable_let_patterns)]
21 if let ItemTraitItem::Fn(fn_signature, _) = &annotated.value {
22 parser.ban_visibility_qualifier(&fn_signature.visibility)?;
23 }
24 }
25
26 let abi_defs_opt: Option<Braces<Vec<Annotated<ItemFn>>>> = Braces::try_parse(parser)?;
27 if let Some(abi_defs) = &abi_defs_opt {
28 for item_fn in abi_defs.get().iter() {
29 parser.ban_visibility_qualifier(&item_fn.value.fn_signature.visibility)?;
30 }
31 }
32 Ok(ItemAbi {
33 abi_token,
34 name,
35 super_traits,
36 abi_items,
37 abi_defs_opt,
38 })
39 }
40}