You could model this with a state machine enum where the "stay put" phase is a variant that accepts a !Move, like so:
enum StateMachine<PinnedState: ?Move> {
InitialState,
State1(String),
State2(Box<PinnedState>),
TerminalState,
}That way you could pass around IntoFutures without being affected by auto traits leaking. Only when you actually call .await() or .poll() would the immovable Future materialize.