Cambie la variante de enumeración mientras mueve el campo a la nueva variante
Quiero actualizar una variante enum mientras muevo un campo de la variante anterior a la nueva sin ninguna clonación:
enum X {
X1(String),
X2(String),
}
fn increment_x(x: &mut X) {
match x {
&mut X::X1(s) => {
*x = X::X2(s);
}
&mut X::X2(s) => {
*x = X::X1(s);
}
}
}
Esto no funciona porque no podemos movernoss
de&mut X
.
Por favor no sugiera cosas como implementar unenum X { X1, X2 }
y usandostruct S { variant: X, str: String }
etc. Este es un ejemplo simplificado, imagine tener muchos otros campos en variantes y querer mover un campo de una variante a otra.