use serde::{Deserialize, Serialize};
use super::{
Documentation, Expression, FunctionKind, IdentifierPath, ModifierInvocationKind, NodeID,
StateMutability, Statement, TypeName, VariableDeclaration, Visibility,
};
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct FunctionDefinition {
pub id: NodeID,
pub src: String,
pub name: String,
#[serde(default)]
pub name_location: Option<String>,
#[serde(default)]
pub documentation: Option<Documentation>,
pub kind: FunctionKind,
pub state_mutability: StateMutability,
#[serde(default)]
pub visibility: Option<Visibility>,
#[serde(rename = "virtual", default)]
pub is_virtual: Option<bool>,
#[serde(default)]
pub overrides: Option<OverrideSpecifier>,
pub parameters: ParameterList,
pub return_parameters: ParameterList,
#[serde(default)]
pub modifiers: Vec<ModifierInvocation>,
#[serde(default)]
pub body: Option<Statement>,
#[serde(default)]
pub implemented: Option<bool>,
#[serde(default)]
pub scope: Option<NodeID>,
#[serde(default)]
pub function_selector: Option<String>,
#[serde(default)]
pub base_functions: Option<Vec<NodeID>>,
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct ParameterList {
pub id: NodeID,
pub src: String,
#[serde(default)]
pub parameters: Vec<VariableDeclaration>,
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct ModifierDefinition {
pub id: NodeID,
pub src: String,
pub name: String,
#[serde(default)]
pub name_location: Option<String>,
#[serde(default)]
pub documentation: Option<Documentation>,
#[serde(default)]
pub visibility: Option<Visibility>,
pub parameters: ParameterList,
#[serde(rename = "virtual", default)]
pub is_virtual: Option<bool>,
#[serde(default)]
pub overrides: Option<OverrideSpecifier>,
#[serde(default)]
pub body: Option<Statement>,
#[serde(default)]
pub base_modifiers: Option<Vec<NodeID>>,
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct ModifierInvocation {
pub id: NodeID,
pub src: String,
pub modifier_name: IdentifierPath,
#[serde(default)]
pub arguments: Option<Vec<Expression>>,
#[serde(default)]
pub kind: Option<ModifierInvocationKind>,
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq)]
#[serde(rename_all = "camelCase")]
pub struct OverrideSpecifier {
pub id: NodeID,
pub src: String,
#[serde(default)]
pub overrides: Vec<TypeName>,
}