use std::collections::HashSet;
use std::fmt::Debug;
use proc_macro2::Span;
use syn::{Attribute, Generics, Ident, ReturnType, Token, TraitItem};
use crate::parse::method_inputs::MethodInputs;
use crate::result::Result;
#[derive(Clone)]
#[cfg_attr(feature = "debug-impls", derive(Debug))]
pub(crate) struct MethodDecl {
pub(crate) attrs: Vec<Attribute>,
pub(crate) unsafety: Option<Token![unsafe]>,
pub(crate) ident: Ident,
pub(crate) generics: Generics,
pub(crate) span: Span,
pub(crate) inputs: MethodInputs,
pub(crate) output: ReturnType,
}
pub(crate) trait MethodDeclParser: Debug {
fn parse(
&self,
trait_item: TraitItem,
generic_types_on_trait: &HashSet<Ident>,
) -> Result<MethodDecl>;
}