use std::fmt;
use serde::{Deserialize, Serialize};
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum ContractKind {
Contract,
Interface,
Library,
}
impl fmt::Display for ContractKind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Contract => write!(f, "contract"),
Self::Interface => write!(f, "interface"),
Self::Library => write!(f, "library"),
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum Visibility {
Default,
Private,
Internal,
Public,
External,
}
impl fmt::Display for Visibility {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, ""),
Self::Private => write!(f, "private"),
Self::Internal => write!(f, "internal"),
Self::Public => write!(f, "public"),
Self::External => write!(f, "external"),
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum StateMutability {
Pure,
View,
Nonpayable,
Payable,
}
impl fmt::Display for StateMutability {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Pure => write!(f, "pure"),
Self::View => write!(f, "view"),
Self::Nonpayable => write!(f, "nonpayable"),
Self::Payable => write!(f, "payable"),
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum Mutability {
Mutable,
Immutable,
Constant,
Transient,
}
impl fmt::Display for Mutability {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Mutable => write!(f, "mutable"),
Self::Immutable => write!(f, "immutable"),
Self::Constant => write!(f, "constant"),
Self::Transient => write!(f, "transient"),
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "lowercase")]
pub enum StorageLocation {
Default,
Storage,
Memory,
Calldata,
Transient,
}
impl fmt::Display for StorageLocation {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Default => write!(f, "default"),
Self::Storage => write!(f, "storage"),
Self::Memory => write!(f, "memory"),
Self::Calldata => write!(f, "calldata"),
Self::Transient => write!(f, "transient"),
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "camelCase")]
pub enum FunctionKind {
Function,
Receive,
Constructor,
Fallback,
FreeFunction,
}
impl fmt::Display for FunctionKind {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
Self::Function => write!(f, "function"),
Self::Receive => write!(f, "receive"),
Self::Constructor => write!(f, "constructor"),
Self::Fallback => write!(f, "fallback"),
Self::FreeFunction => write!(f, "function"),
}
}
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "camelCase")]
pub enum FunctionCallKind {
FunctionCall,
TypeConversion,
StructConstructorCall,
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "camelCase")]
pub enum LiteralKind {
Bool,
Number,
String,
HexString,
UnicodeString,
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "camelCase")]
pub enum ModifierInvocationKind {
ModifierInvocation,
BaseConstructorSpecifier,
}
#[derive(Clone, Debug, Deserialize, Serialize, PartialEq, Eq, Hash)]
#[serde(rename_all = "camelCase")]
pub enum YulLiteralKind {
Number,
String,
Bool,
}