Skip to main content

rseip_core/
either.rs

1// rseip
2//
3// rseip - Ethernet/IP (CIP) in pure Rust.
4// Copyright: 2021, Joylei <leingliu@gmail.com>
5// License: MIT
6
7#[derive(Debug, PartialEq, Eq, PartialOrd, Ord)]
8pub enum Either<A, B> {
9    Left(A),
10    Right(B),
11}
12
13impl<A, B> Either<A, B> {
14    #[inline]
15    pub fn left(&self) -> Option<&A> {
16        match self {
17            Self::Left(ref v) => Some(v),
18            _ => None,
19        }
20    }
21
22    #[inline]
23    pub fn left_mut(&mut self) -> Option<&mut A> {
24        match self {
25            Self::Left(ref mut v) => Some(v),
26            _ => None,
27        }
28    }
29
30    #[inline]
31    pub fn into_left(self) -> Option<A> {
32        match self {
33            Self::Left(v) => Some(v),
34            _ => None,
35        }
36    }
37
38    #[inline]
39    pub fn right(&self) -> Option<&B> {
40        match self {
41            Self::Right(ref v) => Some(v),
42            _ => None,
43        }
44    }
45
46    #[inline]
47    pub fn right_mut(&mut self) -> Option<&mut B> {
48        match self {
49            Self::Right(ref mut v) => Some(v),
50            _ => None,
51        }
52    }
53
54    #[inline]
55    pub fn into_right(self) -> Option<B> {
56        match self {
57            Self::Right(v) => Some(v),
58            _ => None,
59        }
60    }
61}