Изменить вариант перечисления при перемещении поля в новый вариант

Я хочу обновить перечислимый вариант при перемещении поля старого варианта на новое без клонирования:

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

Это не работает, потому что мы не можем двигатьсяs от&mut X.

Пожалуйста, не предлагайте такие вещи, как реализацияenum X { X1, X2 } и используяstruct S { variant: X, str: String } и т. д. Это упрощенный пример, представьте, что у вас есть много других полей в вариантах и ​​вы хотите переместить одно поле из одного варианта в другой.

Ответы на вопрос(2)

Ваш ответ на вопрос