pub trait SpirvVector {
type Intrinsic: Intrinsic;
}
unsafe trait Intrinsic {}
// This type has the metainformation
#[spirv(Vector3)]
struct SpirvVec3;
unsafe impl Intrinsic for SpirvVec3{}
impl SpirvVector for SomeExternalMathVec3 {
type Intrinsic = SpirvVec3;
}
// Check if a given type implements SpirvVector, if it does then access the Intrinsic type which
// has the metainformation to generate a specific OpVector type.
// Some pseudo code
let trait_impl: Option<TraitImpl> = tcx.get_impl_of_trait(ty, def_id);
let associated_ty: Option<Ty> = trait_impl.and_then(|trait_impl| trait_impl.associated_types_iter().first());
fn type_moves_by_default should be enough to figure out how trait system works in rustc
fn type_moves_by_default
should be enough to figure out how trait system works in rustc