Rustのmoveは確かにイマイチ

ローカル変数は = でmove出来るが
構造体フィールドは = では不可なためmem::replaceを使う
ライフタイムの違いによるものとはいえ記述の一貫性に欠ける

この点はC++のstd::moveの方が一貫性がある