use core::fmt::Debug;
use std::{error::Error, collections::HashMap};
use proc_macro2::TokenStream;
use serde::{Serialize, Deserialize};
pub use serde_wrapper::TokenStreamWrapper;
mod serde_wrapper;
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct TraitProfile{
functions: HashMap<String, TokenStreamWrapper>,
}
impl TraitProfile{
pub fn new(funs: HashMap<String, TokenStream>) -> Self {
let mut inner = HashMap::new();
for (name, stream) in funs {
inner.insert(name, TokenStreamWrapper::new(stream));
}
Self{
functions: inner
}
}
pub fn get_funs(&self) -> Result<HashMap<String, TokenStream>, Box<dyn Error>> {
let wrappers = self.functions.clone();
let mut funs = HashMap::new();
for (name, wrapper) in wrappers {
funs.insert(name, wrapper.get_inner()?);
}
Ok(funs)
}
}
#[derive(Debug, Clone)]
pub enum DeduplicatedFunctionProfile {
Single(String, TokenStreamWrapper),
Multiple(Vec<String>),
}
pub trait TraitCallMessage {
type Representation;
fn get_fun_name(&self) -> String;
fn get_trait_name(&self) -> Option<String>;
fn get_params(&self) -> Vec<Self::Representation>;
fn new_params(&mut self, p: Vec<Self::Representation>);
}
#[cfg(test)]
mod tests {
#[test]
fn it_works() {
let result = 2 + 2;
assert_eq!(result, 4);
}
}