|  | //! Defines a set of traits that is used for abstracting | 
|  | //! rustc_public's components that are needed in rustc_public_bridge. | 
|  | //! | 
|  | //! These traits are really useful when programming | 
|  | //! in rustc_public-agnostic settings. | 
|  |  | 
|  | use std::fmt::Debug; | 
|  |  | 
|  | use super::context::CompilerCtxt; | 
|  | use super::{Bridge, Tables}; | 
|  |  | 
|  | pub trait Error { | 
|  | fn new(msg: String) -> Self; | 
|  | fn from_internal<T: Debug>(err: T) -> Self; | 
|  | } | 
|  |  | 
|  | pub trait Prov<B: Bridge> { | 
|  | fn new(aid: B::AllocId) -> Self; | 
|  | } | 
|  |  | 
|  | pub trait Allocation<B: Bridge> { | 
|  | fn new<'tcx>( | 
|  | bytes: Vec<Option<u8>>, | 
|  | ptrs: Vec<(usize, rustc_middle::mir::interpret::AllocId)>, | 
|  | align: u64, | 
|  | mutability: rustc_middle::mir::Mutability, | 
|  | tables: &mut Tables<'tcx, B>, | 
|  | cx: &CompilerCtxt<'tcx, B>, | 
|  | ) -> Self; | 
|  | } | 
|  |  | 
|  | macro_rules! make_bridge_trait { | 
|  | ($name:ident) => { | 
|  | pub trait $name<B: Bridge> { | 
|  | fn new(did: B::DefId) -> Self; | 
|  | } | 
|  | }; | 
|  | } | 
|  |  | 
|  | make_bridge_trait!(CrateItem); | 
|  | make_bridge_trait!(AdtDef); | 
|  | make_bridge_trait!(ForeignModuleDef); | 
|  | make_bridge_trait!(ForeignDef); | 
|  | make_bridge_trait!(FnDef); | 
|  | make_bridge_trait!(ClosureDef); | 
|  | make_bridge_trait!(CoroutineDef); | 
|  | make_bridge_trait!(CoroutineClosureDef); | 
|  | make_bridge_trait!(AliasDef); | 
|  | make_bridge_trait!(ParamDef); | 
|  | make_bridge_trait!(BrNamedDef); | 
|  | make_bridge_trait!(TraitDef); | 
|  | make_bridge_trait!(GenericDef); | 
|  | make_bridge_trait!(ConstDef); | 
|  | make_bridge_trait!(ImplDef); | 
|  | make_bridge_trait!(RegionDef); | 
|  | make_bridge_trait!(CoroutineWitnessDef); | 
|  | make_bridge_trait!(AssocDef); | 
|  | make_bridge_trait!(OpaqueDef); | 
|  | make_bridge_trait!(StaticDef); |