1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#![allow(dead_code)]
use crate::core::token::{AstToken, Token};
use sway_core::{language::parsed::Declaration, transform};
pub fn attributes_map(token: &Token) -> Option<&transform::AttributesMap> {
match &token.parsed {
AstToken::Declaration(declaration) => match declaration {
Declaration::EnumDeclaration(decl) => Some(&decl.attributes),
Declaration::FunctionDeclaration(decl) => Some(&decl.attributes),
Declaration::StructDeclaration(decl) => Some(&decl.attributes),
Declaration::ConstantDeclaration(decl) => Some(&decl.attributes),
Declaration::StorageDeclaration(decl) => Some(&decl.attributes),
_ => None,
},
AstToken::FunctionDeclaration(decl) => Some(&decl.attributes),
AstToken::StorageField(field) => Some(&field.attributes),
AstToken::StructField(field) => Some(&field.attributes),
AstToken::TraitFn(trait_fn) => Some(&trait_fn.attributes),
AstToken::EnumVariant(variant) => Some(&variant.attributes),
_ => None,
}
}
pub fn doc_attributes(token: &Token) -> Option<&[transform::Attribute]> {
attributes_map(token)
.and_then(|attributes| attributes.get(&transform::AttributeKind::Doc))
.map(Vec::as_slice)
}
pub fn storage_attributes(token: &Token) -> Option<&[transform::Attribute]> {
attributes_map(token)
.and_then(|attributes| attributes.get(&transform::AttributeKind::Storage))
.map(Vec::as_slice)
}