2 состояния
pub enum State {
Ready(KeyPair),
Executing(BoxedFuture<KeyPair>)
}
struct Actor {
state: State
}
Теперь я хочу уметь из Ready перейти в Executing:
impl Actor {
fn transition(&mut self) {
// ERROR: Cannot move self
let key_pair = match self.state {
State::Ready(key_pair) => key_pair,
State::Executing(..) => return,
};
self.state = State::Executing(async move { key_pair });
}
}
Но у меня получается так, что для создания стейта Executing, мне нужен key_pair. А я не могу вынуть key_pair из self.state, ничем его тут же не заменив а-ля mem::replace.
Как быть?
А обернуть KeyPair в Option и потом по ней take не вариант?
Вариант конечно. Просто тогда окажется, что у меня можно в типах описать совершенно невалидное состояние. Нужно очень следить чтобы не получился актор с Ready { None }. А кто-то early return добавит, и всё.
transition(self) -> Self
у тебя же тут все правильно написано
Обсуждают сегодня