Genéricos de ocultamiento de punteros a través de `mem :: transmute ()`

Estoy intentando escribir enlaces Rust para una biblioteca de colección C (Judy Arrays [1]) que solo proporciona espacio para almacenar un valor de ancho de puntero. Mi empresa tiene una buena cantidad de código existente que utiliza este espacio para almacenar directamente valores que no son punteros, como enteros de ancho de puntero y estructuras pequeñas. Me gustaría que mis enlaces Rust permitan el acceso de tipo seguro a tales colecciones usando genéricos, pero estoy teniendo problemas para que la semántica de puntero funcione correctamente.

losmem::transmute() La función parece una herramienta potencial para implementar el comportamiento deseado, pero intentar usarlo en una instancia de un tipo parametrizado produce un error de compilación confuso para mí.

Código de ejemplo:

pub struct Example<T> {
    v: usize,
    t: PhantomData<T>,
}

impl<T> Example<T> {
    pub fn new() -> Example<T> {
        Example { v: 0, t: PhantomData }
    }

    pub fn insert(&mut self, val: T) {
        unsafe {
            self.v = mem::transmute(val);
        }
    }
}

Error resultante:

src/lib.rs:95:22: 95:36 error: cannot transmute to or from a type that contains type parameters in its interior [E0139]
src/lib.rs:95             self.v = mem::transmute(val);
                                   ^~~~~~~~~~~~~~

¿Significa esto que un tipo que consta solo de un parámetro "contiene parámetros de tipo en su interior" y, por lo tanto,transmute() simplemente no funciona aquí? ¿Alguna sugerencia de la forma correcta de hacer esto?

(Pregunta relacionada, intentando lograr el mismo resultado, pero no necesariamente a través demem::transmute().)

[1] Soy consciente de lo existenterust-judy proyecto, pero no admite el alijo de puntero que quiero, y de todos modos estoy escribiendo estos nuevos enlaces en gran medida como un ejercicio de aprendizaje.

Respuestas a la pregunta(1)

Su respuesta a la pregunta