use proc_macro2::{Ident, TokenStream as TokenStream2};
use syn::ItemImpl;
#[derive(Clone)]
pub(crate) struct ImportInfo {
pub name: String,
pub path: String,
}
#[derive(Clone, Copy, PartialEq, Eq)]
pub(crate) enum Receiver {
None,
Ref,
RefMut,
}
pub(crate) struct ParameterInfo {
pub name: Ident,
pub ty: TokenStream2,
pub is_ref: bool,
pub is_mut_ref: bool,
}
pub(crate) struct FunctionInfo {
pub name: Ident,
pub doc: Option<String>,
pub params: Vec<ParameterInfo>,
pub input_type: TokenStream2,
pub output_type: TokenStream2,
pub returns_ref: bool,
pub receiver: Receiver,
pub trait_name: Option<String>,
pub feed_type: Option<TokenStream2>,
}
#[derive(Clone)]
pub(crate) struct EventInfo {
pub data_type: TokenStream2,
}
pub(crate) struct TraitImplInfo<'a> {
pub trait_name: String,
pub impl_block: &'a ItemImpl,
pub expose_list: Vec<String>,
}
pub(crate) struct Analysis {
pub contract_ident: Ident,
pub contract_name: String,
pub imports: Vec<ImportInfo>,
pub functions: Vec<FunctionInfo>,
pub events: Vec<EventInfo>,
}