Rust言語では ref パターンを使って右辺の式の参照を暗に取る事ができると思います。

// Copyではない適当な型
struct Val{
    value: u32
}

fn main() {
    let x: Val = Val { value: 32 };
    let rx1: &Val = &x; // 普通に参照を取る
    let ref rx2: Val = x; // 参照を暗に取る
    let ref rx3: Val = x; // 何度でも取れる
    println!("{}", x.value); // 単に参照をとっているだけなのでmoveされておらずxは使える
}

この文法を関数引数で使ってみます。

struct Val {
    value: u32
}

// refでとってみる
fn test(ref v: Val) {
    println!("test: {}", v.value)
}

fn main() {
    let x: Val = Val { value: 32 };
    test(x); // しかし残念ながらここでmoveされていて
    test(x) // コンパイルエラー(value used here after move)
}

しかしこの場合は引数はmoveされてしまい、二度使う事ができません。
こういう形でrefを使った場合にxがmoveされる理由をご存知の方がいたら教えて頂けませんか。