use crate::source_range::SourceRange; use std::hash::{Hash, Hasher}; use std::rc::Rc; pub struct GenericParameterSymbol { declared_name: Rc, declared_name_source_range: SourceRange, scope_id: usize, } impl GenericParameterSymbol { pub fn new( declared_name: &Rc, declared_name_source_range: &SourceRange, scope_id: usize, ) -> Self { Self { declared_name: declared_name.clone(), declared_name_source_range: declared_name_source_range.clone(), scope_id, } } pub fn declared_name(&self) -> &str { &self.declared_name } pub fn declared_name_owned(&self) -> Rc { self.declared_name.clone() } pub fn declared_name_source_range(&self) -> &SourceRange { &self.declared_name_source_range } pub fn scope_id(&self) -> usize { self.scope_id } } impl Eq for GenericParameterSymbol {} impl PartialEq for GenericParameterSymbol { fn eq(&self, other: &Self) -> bool { self.declared_name == other.declared_name && self.scope_id == other.scope_id } } impl Hash for GenericParameterSymbol { fn hash(&self, state: &mut H) { self.declared_name.hash(state); self.scope_id.hash(state); } }