133d722a9Sopenharmony_ciuse crate::syntax::instantiate::NamedImplKey; 233d722a9Sopenharmony_ciuse crate::syntax::{Lifetimes, NamedType, Pair, Types}; 333d722a9Sopenharmony_ciuse proc_macro2::Ident; 433d722a9Sopenharmony_ci 533d722a9Sopenharmony_ci#[derive(Copy, Clone)] 633d722a9Sopenharmony_cipub struct Resolution<'a> { 733d722a9Sopenharmony_ci pub name: &'a Pair, 833d722a9Sopenharmony_ci pub generics: &'a Lifetimes, 933d722a9Sopenharmony_ci} 1033d722a9Sopenharmony_ci 1133d722a9Sopenharmony_ciimpl<'a> Types<'a> { 1233d722a9Sopenharmony_ci pub fn resolve(&self, ident: &impl UnresolvedName) -> Resolution<'a> { 1333d722a9Sopenharmony_ci let ident = ident.ident(); 1433d722a9Sopenharmony_ci match self.try_resolve(ident) { 1533d722a9Sopenharmony_ci Some(resolution) => resolution, 1633d722a9Sopenharmony_ci None => panic!("Unable to resolve type `{}`", ident), 1733d722a9Sopenharmony_ci } 1833d722a9Sopenharmony_ci } 1933d722a9Sopenharmony_ci 2033d722a9Sopenharmony_ci pub fn try_resolve(&self, ident: &impl UnresolvedName) -> Option<Resolution<'a>> { 2133d722a9Sopenharmony_ci let ident = ident.ident(); 2233d722a9Sopenharmony_ci self.resolutions.get(ident).copied() 2333d722a9Sopenharmony_ci } 2433d722a9Sopenharmony_ci} 2533d722a9Sopenharmony_ci 2633d722a9Sopenharmony_cipub trait UnresolvedName { 2733d722a9Sopenharmony_ci fn ident(&self) -> &Ident; 2833d722a9Sopenharmony_ci} 2933d722a9Sopenharmony_ci 3033d722a9Sopenharmony_ciimpl UnresolvedName for Ident { 3133d722a9Sopenharmony_ci fn ident(&self) -> &Ident { 3233d722a9Sopenharmony_ci self 3333d722a9Sopenharmony_ci } 3433d722a9Sopenharmony_ci} 3533d722a9Sopenharmony_ci 3633d722a9Sopenharmony_ciimpl UnresolvedName for NamedType { 3733d722a9Sopenharmony_ci fn ident(&self) -> &Ident { 3833d722a9Sopenharmony_ci &self.rust 3933d722a9Sopenharmony_ci } 4033d722a9Sopenharmony_ci} 4133d722a9Sopenharmony_ci 4233d722a9Sopenharmony_ciimpl<'a> UnresolvedName for NamedImplKey<'a> { 4333d722a9Sopenharmony_ci fn ident(&self) -> &Ident { 4433d722a9Sopenharmony_ci self.rust 4533d722a9Sopenharmony_ci } 4633d722a9Sopenharmony_ci} 47