Alterar variante de enumeração ao mover o campo para a nova variante

Quero atualizar uma variante enum ao mover um campo da antiga variante para a nova sem clonagem:

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);
        }
    }
}

Isso não funciona porque não podemos nos movers de&mut X.

Por favor, não sugira coisas como implementar umenum X { X1, X2 } e usandostruct S { variant: X, str: String } etc. Este é um exemplo simplificado, imagine ter muitos outros campos em variantes e desejar mover um campo de uma variante para outra.

questionAnswers(2)

yourAnswerToTheQuestion