Solución ingeniosa para implementaciones blanket conflictivas en Rust

2025-07-04
Solución ingeniosa para implementaciones blanket conflictivas en Rust

El sistema de traits de Rust es potente pero estricto en evitar ambigüedades en las implementaciones blanket. El autor se encontró con este problema al construir Joydb, necesitando soportar dos implementaciones mutuamente excluyentes del trait `Adapter`: `UnifiedAdapter` y `PartitionedAdapter`. Un enfoque directo usando implementaciones blanket falló. La solución, detallada en esta publicación, usa structs marcadores (`Unified` y `Partitioned`), un trait auxiliar (`BlanketAdapter`) y un tipo asociado dentro del trait `Adapter`. Esto permite hábilmente ambos comportamientos sin violar las reglas de coherencia de Rust, manteniendo una buena ergonomia y mantenibilidad del código.