solidity_language_server/solc_ast/
functions.rs1use serde::{Deserialize, Serialize};
4
5use super::{
6 Documentation, Expression, FunctionKind, IdentifierPath, ModifierInvocationKind, NodeID,
7 StateMutability, Statement, TypeName, VariableDeclaration, Visibility,
8};
9
10#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
12#[serde(rename_all = "camelCase")]
13pub struct FunctionDefinition {
14 pub id: NodeID,
15 pub src: String,
16 pub name: String,
17 #[serde(default)]
18 pub name_location: Option<String>,
19 #[serde(default)]
20 pub documentation: Option<Documentation>,
21 pub kind: FunctionKind,
22 pub state_mutability: StateMutability,
23 #[serde(default)]
24 pub visibility: Option<Visibility>,
25 #[serde(rename = "virtual", default)]
26 pub is_virtual: Option<bool>,
27 #[serde(default)]
28 pub overrides: Option<OverrideSpecifier>,
29 pub parameters: ParameterList,
30 pub return_parameters: ParameterList,
31 #[serde(default)]
32 pub modifiers: Vec<ModifierInvocation>,
33 #[serde(default)]
35 pub body: Option<Statement>,
36 #[serde(default)]
37 pub implemented: Option<bool>,
38 #[serde(default)]
39 pub scope: Option<NodeID>,
40 #[serde(default)]
42 pub function_selector: Option<String>,
43 #[serde(default)]
45 pub base_functions: Option<Vec<NodeID>>,
46}
47
48#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
50#[serde(rename_all = "camelCase")]
51pub struct ParameterList {
52 pub id: NodeID,
53 pub src: String,
54 #[serde(default)]
55 pub parameters: Vec<VariableDeclaration>,
56}
57
58#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
60#[serde(rename_all = "camelCase")]
61pub struct ModifierDefinition {
62 pub id: NodeID,
63 pub src: String,
64 pub name: String,
65 #[serde(default)]
66 pub name_location: Option<String>,
67 #[serde(default)]
68 pub documentation: Option<Documentation>,
69 #[serde(default)]
70 pub visibility: Option<Visibility>,
71 pub parameters: ParameterList,
72 #[serde(rename = "virtual", default)]
73 pub is_virtual: Option<bool>,
74 #[serde(default)]
75 pub overrides: Option<OverrideSpecifier>,
76 #[serde(default)]
78 pub body: Option<Statement>,
79 #[serde(default)]
81 pub base_modifiers: Option<Vec<NodeID>>,
82}
83
84#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
86#[serde(rename_all = "camelCase")]
87pub struct ModifierInvocation {
88 pub id: NodeID,
89 pub src: String,
90 pub modifier_name: IdentifierPath,
91 #[serde(default)]
92 pub arguments: Option<Vec<Expression>>,
93 #[serde(default)]
94 pub kind: Option<ModifierInvocationKind>,
95}
96
97#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
99#[serde(rename_all = "camelCase")]
100pub struct OverrideSpecifier {
101 pub id: NodeID,
102 pub src: String,
103 #[serde(default)]
104 pub overrides: Vec<TypeName>,
105}