sway_ast/item/
item_storage.rs

1use crate::priv_prelude::*;
2
3#[derive(Clone, Debug, Serialize)]
4pub struct ItemStorage {
5    pub storage_token: StorageToken,
6    pub entries: Braces<Punctuated<Annotated<StorageEntry>, CommaToken>>,
7}
8
9impl Spanned for ItemStorage {
10    fn span(&self) -> Span {
11        Span::join(self.storage_token.span(), &self.entries.span())
12    }
13}
14
15#[derive(Clone, Debug, Serialize)]
16
17pub struct StorageEntry {
18    pub name: Ident,
19    pub namespace: Option<Braces<Punctuated<Annotated<Box<StorageEntry>>, CommaToken>>>,
20    pub field: Option<StorageField>,
21}
22
23impl Spanned for StorageEntry {
24    fn span(&self) -> Span {
25        if let Some(namespace) = &self.namespace {
26            Span::join(self.name.span(), &namespace.span())
27        } else if let Some(field) = &self.field {
28            Span::join(self.name.span(), &field.span())
29        } else {
30            self.name.span()
31        }
32    }
33}
34
35#[derive(Clone, Debug, Serialize)]
36
37pub struct StorageField {
38    pub name: Ident,
39    pub in_token: Option<InToken>,
40    pub key_expr: Option<Expr>,
41    pub colon_token: ColonToken,
42    pub ty: Ty,
43    pub eq_token: EqToken,
44    pub initializer: Expr,
45}
46
47impl Spanned for StorageField {
48    fn span(&self) -> Span {
49        Span::join_all([
50            self.name.span(),
51            self.colon_token.span(),
52            self.ty.span(),
53            self.eq_token.span(),
54            self.initializer.span(),
55        ])
56    }
57}