1use vstd::prelude::*;
3
4#[verifier::allow(autoderive_clone_without_spec)]
9#[verus_verify]
10#[derive(Clone, Copy, PartialEq, Eq, Debug)]
11pub enum Either<L, R> {
12 Left(L),
14 Right(R),
16}
17
18impl<L, R> Either<L, R> {
19 #[verus_verify(dual_spec)]
20 pub fn left(self) -> Option<L> {
22 match self {
23 Self::Left(left) => Some(left),
24 Self::Right(_) => None,
25 }
26 }
27
28 #[verus_verify(dual_spec)]
29 pub fn right(self) -> Option<R> {
31 match self {
32 Self::Left(_) => None,
33 Self::Right(right) => Some(right),
34 }
35 }
36
37 #[verus_verify(dual_spec)]
38 pub fn is_left(&self) -> bool {
40 matches!(self, Self::Left(_))
41 }
42
43 #[verus_verify(dual_spec)]
44 pub fn is_right(&self) -> bool {
46 matches!(self, Self::Right(_))
47 }
48
49 }