Was ist der Unterschied zwischen dem Platzieren von "mut" vor einem Variablennamen und nach dem ":"?

Hier sind zwei Funktionssignaturen, die ich in der Rust-Dokumentation gesehen habe:

fn modify_foo(mut foo: Box<i32>) { *foo += 1; *foo }
fn modify_foo(foo: &mut i32) { *foo += 1; *foo }

Warum die unterschiedliche Platzierung vonmut?

Es scheint, dass die erste Funktion auch als @ deklariert werden könn

fn modify_foo(foo: mut Box<i32>) { /* ... */ }