pub enum State {
Started(Vec<Id>),
InProgress,
Terminated
}
pub trait Locker {
async fn start(&mut self, id: Id) -> State;
}
#[tokio::test]
async fn test_locker() {
let State::Started(ids) = locker.start().await;
}
Entendo que o compilador reclama test_locker
que nem todas as correspondências foram abordadas.
Mas falhei em identificar como consertar isso. Na verdade, neste teste, sei que só pode ser esse estado, então não preciso realmente de uma correspondência.
Eu tentei várias coisas:
let State::Started(ids) = locker.start().await;
assert!(matches!(ids, State::Started(ids)));
Eu esperava que isso falhasse, pois os ids
na primeira linha já estão digitados como State::Started
.
Também tentei declarar let ids:Vec<Id>
antes, mas isso parece estar em algum tipo de escopo diferente, pois não posso fazer issolet State::Started(ids) = ...
Acho que eu poderia simplesmente fazer uma correspondência primeiro e ignorar todas as outras opções, mas acho que deveria haver uma maneira mais elegante?
Use a
let-else
sintaxe: