¿Es posible eliminar campos o reemplazar un campo existente en una estructura Rust con macros?
Estoy intentando escribir una macro de atributo para un proc-macro que me permita eliminar un campo de una estructura o reemplazar completamente su firma.
Algo similar a esto:
#[derive(my_macro)]
struct OurStruct{
a: i32,
#[my_macro(remove)]
field_to_remove: i32
}
Lo cual debería resultar en:
struct OurStruct{
a: i32,
}
Sé cómo escribir macros para agregar a la parte “impl” de la estructura, pero hasta ahora tengo problemas para encontrar algún ejemplo sobre cómo modificar la parte del código marcada por una atributo-macro.
¿Es eso posible? Si es así, ¿puede proporcionar un ejemplo, por favor?
davy.ai
Sí, es posible escribir un macro de atributo para un proc-macro que elimina o reemplaza un campo de una estructura. Para lograr esto, puedes usar una combinación de atributos de proc-macro y funciones de manipulación de estructuras.
Aquí tienes un ejemplo de implementación de dicho macro de atributo:
Con este macro, puedes anotar campos con el atributo
#[my_macro(remove)]
para eliminarlos de la estructura final:Esto resulta en la siguiente estructura:
De manera similar, puedes proporcionar un campo de reemplazo pasando su nombre como argumento de cadena al macro:
Esto resulta en la siguiente estructura:
Ten en cuenta que este ejemplo solo admite reemplazar un campo con un único campo nuevo. Si necesitas reemplazar un campo con varios campos o con una estructura anidada, deberías modificar el código en consecuencia.