use std::error::Error;
use std::fmt;
use serde::{Deserialize, Serialize};
#[derive(Debug)]
pub enum ConstructorAnalyzerError {
IoError(std::io::Error),
RegexError(regex::Error),
NotFound(String),
InvalidFormat(String),
}
impl fmt::Display for ConstructorAnalyzerError {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
match self {
ConstructorAnalyzerError::IoError(err) => write!(f, "IO error: {err}"),
ConstructorAnalyzerError::RegexError(err) => write!(f, "Regex error: {err}"),
ConstructorAnalyzerError::NotFound(path) => write!(f, "Path not found: {path}"),
ConstructorAnalyzerError::InvalidFormat(msg) => write!(f, "Invalid format: {msg}"),
}
}
}
impl Error for ConstructorAnalyzerError {}
impl From<std::io::Error> for ConstructorAnalyzerError {
fn from(err: std::io::Error) -> Self {
ConstructorAnalyzerError::IoError(err)
}
}
impl From<regex::Error> for ConstructorAnalyzerError {
fn from(err: regex::Error) -> Self {
ConstructorAnalyzerError::RegexError(err)
}
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnalysisResult {
pub function_type: FunctionType,
pub file_name: String,
pub arguments: String,
pub code: String,
pub address_arguments: Vec<(String, String)>,
pub validated_variables: Vec<String>,
pub missing_validations: Vec<String>,
pub validation_types: Vec<ValidationType>,
}
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct AnalysisResultJson {
pub function_type: FunctionType,
pub file_name: String,
pub arguments: String,
pub address_arguments: Vec<String>,
pub validated_variables: Vec<String>,
pub missing_validations: Vec<String>,
pub validation_types: Vec<ValidationType>,
}
impl From<&AnalysisResult> for AnalysisResultJson {
fn from(result: &AnalysisResult) -> Self {
AnalysisResultJson {
function_type: result.function_type.clone(),
file_name: result.file_name.clone(),
arguments: result.arguments.clone(),
address_arguments: result
.address_arguments
.iter()
.map(|(_, name)| name.clone())
.collect(),
validated_variables: result.validated_variables.clone(),
missing_validations: result.missing_validations.clone(),
validation_types: result.validation_types.clone(),
}
}
}
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum FunctionType {
Constructor,
Initialize,
Regular(String), }
#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
pub enum ValidationType {
EqualityCheck,
RequireStatement,
}