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;
}
我理解编译器会抱怨test_locker
没有解决所有的匹配问题。
但我不知道该如何解决这个问题。事实上,在这个测试中,我知道它只能是那种状态,所以我实际上不需要匹配。
我尝试了几件事:
let State::Started(ids) = locker.start().await;
assert!(matches!(ids, State::Started(ids)));
我以为这会失败,因为ids
第一行中的已经输入为State::Started
。
也尝试过通过声明let ids:Vec<Id>
,但这似乎在某种不同的范围内,因为我不能这样做let State::Started(ids) = ...
我想我可以先进行匹配并忽略所有其他选项,但我觉得应该有一种更优雅的方式?
使用
let-else
语法: