sway_ast/item/
item_storage.rs1use 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}