use crate::name_analysis::symbol::class_symbol::ClassSymbol; use crate::name_analysis::symbol::function_symbol::FunctionSymbol; use crate::name_analysis::symbol::interface_symbol::InterfaceSymbol; use crate::name_analysis::symbol::module_symbol::ModuleSymbol; use crate::name_analysis::symbol::Symbol; use std::cell::RefCell; use std::rc::Rc; #[derive(Debug)] pub enum ModuleLevelSymbol { Module(Rc>), Interface(Rc>), Class(Rc>), Function(Rc>), } impl ModuleLevelSymbol { pub fn to_symbol(self) -> Rc> { match self { ModuleLevelSymbol::Module(module_symbol) => module_symbol as Rc>, ModuleLevelSymbol::Interface(interface_symbol) => { interface_symbol as Rc> } ModuleLevelSymbol::Class(class_symbol) => class_symbol as Rc>, ModuleLevelSymbol::Function(function_symbol) => { function_symbol as Rc> } } } }