sway_parse/item/
item_const.rs

1use crate::{Parse, ParseResult, Parser};
2
3use sway_ast::ItemConst;
4
5impl Parse for ItemConst {
6    fn parse(parser: &mut Parser) -> ParseResult<ItemConst> {
7        let pub_token = parser.take();
8        let const_token = parser.parse()?;
9        let name = parser.parse()?;
10        let ty_opt = match parser.take() {
11            Some(colon_token) => {
12                let ty = parser.parse()?;
13                Some((colon_token, ty))
14            }
15            None => None,
16        };
17        let eq_token_opt = parser.take();
18        let expr_opt = match &eq_token_opt {
19            Some(_eq) => Some(parser.parse()?),
20            None => None,
21        };
22        // Use the default here since the braces parsing is expecting
23        // a semicolon, that allows us to re-use the same parsing code
24        // between associated consts and module-level consts.
25        let semicolon_token = parser.peek().unwrap_or_default();
26        Ok(ItemConst {
27            pub_token,
28            const_token,
29            name,
30            ty_opt,
31            eq_token_opt,
32            expr_opt,
33            semicolon_token,
34        })
35    }
36}