blob: 821f542760b34b930916436defd7196750e6b079 [file] [log] [blame]
David Tolnayfedc63b2021-03-27 00:19:13 -04001use crate::syntax::instantiate::NamedImplKey;
David Tolnay1e5fe232021-01-01 18:11:40 -08002use crate::syntax::{Lifetimes, NamedType, Pair, Types};
David Tolnay3abed472020-12-31 23:34:53 -08003use proc_macro2::Ident;
4
David Tolnay1e5fe232021-01-01 18:11:40 -08005#[derive(Copy, Clone)]
6pub struct Resolution<'a> {
7 pub name: &'a Pair,
8 pub generics: &'a Lifetimes,
9}
10
David Tolnay3abed472020-12-31 23:34:53 -080011impl<'a> Types<'a> {
David Tolnay1e5fe232021-01-01 18:11:40 -080012 pub fn resolve(&self, ident: &impl UnresolvedName) -> Resolution<'a> {
13 *self
14 .resolutions
David Tolnay3abed472020-12-31 23:34:53 -080015 .get(ident.ident())
16 .expect("Unable to resolve type")
17 }
18}
19
20pub trait UnresolvedName {
21 fn ident(&self) -> &Ident;
22}
23
24impl UnresolvedName for Ident {
25 fn ident(&self) -> &Ident {
26 self
27 }
28}
29
30impl UnresolvedName for NamedType {
31 fn ident(&self) -> &Ident {
32 &self.rust
33 }
34}
David Tolnayfedc63b2021-03-27 00:19:13 -040035
36impl<'a> UnresolvedName for NamedImplKey<'a> {
37 fn ident(&self) -> &Ident {
38 self.rust
39 }
40}