fidl_next_protocol/
flexible.rs1use crate::FrameworkError;
6
7#[derive(Clone, Debug)]
9pub enum Flexible<T> {
10 Ok(T),
12 FrameworkErr(FrameworkError),
14}
15
16impl<T> Flexible<T> {
17 pub fn is_ok(&self) -> bool {
19 matches!(self, Self::Ok(_))
20 }
21
22 pub fn is_framework_err(&self) -> bool {
24 matches!(self, Self::FrameworkErr(_))
25 }
26
27 pub fn ok(self) -> Option<T> {
29 if let Self::Ok(value) = self { Some(value) } else { None }
30 }
31
32 pub fn framework_err(self) -> Option<FrameworkError> {
34 if let Self::FrameworkErr(error) = self { Some(error) } else { None }
35 }
36
37 pub fn unwrap(self) -> T {
41 self.ok().unwrap()
42 }
43
44 pub fn unwrap_framework_err(self) -> FrameworkError {
48 self.framework_err().unwrap()
49 }
50
51 pub fn as_ref(&self) -> Flexible<&T> {
53 match self {
54 Self::Ok(value) => Flexible::Ok(value),
55 Self::FrameworkErr(framework_error) => Flexible::FrameworkErr(*framework_error),
56 }
57 }
58}
59
60impl<T, T2> PartialEq<Flexible<T2>> for Flexible<T>
61where
62 T: PartialEq<T2>,
63{
64 fn eq(&self, other: &Flexible<T2>) -> bool {
65 match (self, other) {
66 (Flexible::Ok(lhs), Flexible::Ok(rhs)) => lhs == rhs,
67 (Flexible::FrameworkErr(lhs), Flexible::FrameworkErr(rhs)) => lhs == rhs,
68 _ => false,
69 }
70 }
71}