исправление путем «изменения способа десагарства вызовов методов», но все же предпочитает более общий подход, к сожалению, без объяснения причин.

от вопрос уже есть ответ здесь:

Занимать проверку и аргументы функции в Rust, правильно или более усердно? [Дубликат] 1 ответ

Вот образец:

struct X(u32);

impl X {
    fn f(&mut self, v: u32) {}
}

fn main() {
    let mut x = X(42);

    // works
    let v = x.0;
    x.f(v);

    // cannot use `x.0` because it was mutably borrowed
    x.f(x.0);
}

(Ржавая детская площадка)

error[E0503]: cannot use `x.0` because it was mutably borrowed
  --> src/main.rs:16:9
   |
16 |     x.f(x.0);
   |     -   ^^^ use of borrowed `x`
   |     |
   |     borrow of `x` occurs here

В чем причинаx.f(x.0) не работает?x.0 передается в качестве аргумента, привязанного кv параметр типаu32: нет абсолютно никакой возможности, что функция доступа к телуx.0 через параметр.

Более того, мне кажется очень странным, что:

f(something);

не работает, пока:

v = something;
f(v);

работает.

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

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