| use crate::syntax::{Lifetimes, NamedType, Pair, Types}; |
| use proc_macro2::Ident; |
| |
| #[derive(Copy, Clone)] |
| pub struct Resolution<'a> { |
| pub name: &'a Pair, |
| pub generics: &'a Lifetimes, |
| } |
| |
| impl<'a> Types<'a> { |
| pub fn resolve(&self, ident: &impl UnresolvedName) -> Resolution<'a> { |
| *self |
| .resolutions |
| .get(ident.ident()) |
| .expect("Unable to resolve type") |
| } |
| } |
| |
| pub trait UnresolvedName { |
| fn ident(&self) -> &Ident; |
| } |
| |
| impl UnresolvedName for Ident { |
| fn ident(&self) -> &Ident { |
| self |
| } |
| } |
| |
| impl UnresolvedName for NamedType { |
| fn ident(&self) -> &Ident { |
| &self.rust |
| } |
| } |