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 StorageEntry {
24 pub fn friendly_kind_name(&self) -> &'static str {
27 if self.namespace.is_some() {
28 "storage namespace"
29 } else {
30 "storage field"
31 }
32 }
33}
34
35impl Spanned for StorageEntry {
36 fn span(&self) -> Span {
37 if let Some(namespace) = &self.namespace {
38 Span::join(self.name.span(), &namespace.span())
39 } else if let Some(field) = &self.field {
40 Span::join(self.name.span(), &field.span())
41 } else {
42 self.name.span()
43 }
44 }
45}
46
47#[derive(Clone, Debug, Serialize)]
48
49pub struct StorageField {
50 pub name: Ident,
51 pub in_token: Option<InToken>,
52 pub key_expr: Option<Expr>,
53 pub colon_token: ColonToken,
54 pub ty: Ty,
55 pub eq_token: EqToken,
56 pub initializer: Expr,
57}
58
59impl Spanned for StorageField {
60 fn span(&self) -> Span {
61 Span::join_all([
62 self.name.span(),
63 self.colon_token.span(),
64 self.ty.span(),
65 self.eq_token.span(),
66 self.initializer.span(),
67 ])
68 }
69}