use crate::name_analysis::symbol::function_symbol::FunctionSymbol; use crate::name_analysis::symbol::source_definition::SourceDefinition; use crate::name_analysis::symbol::Symbol; use std::cell::RefCell; use std::collections::HashMap; use std::rc::Rc; #[derive(Debug)] pub struct InterfaceSymbol { fqn_parts: Vec>, functions: HashMap, Rc>>, source_definition: Option, } impl InterfaceSymbol { pub fn new(fqn_parts: &[Rc], source_definition: Option) -> Self { Self { fqn_parts: fqn_parts.to_vec(), functions: HashMap::new(), source_definition, } } pub fn declared_name(&self) -> &str { self.fqn_parts.last().unwrap().as_ref() } pub fn declared_name_owned(&self) -> Rc { self.fqn_parts.last().unwrap().clone() } } impl Symbol for InterfaceSymbol { fn source_definition(&self) -> Option<&SourceDefinition> { self.source_definition.as_ref() } }