ptero/method/variant.rs
1use std::{convert::TryFrom, error::Error, fmt};
2
3use super::complex::{eluv::ELUVMethodVariant, extended_line::ExtendedLineMethodVariant};
4
5#[derive(Debug)]
6pub struct VariantError(u8);
7
8impl VariantError {
9 fn new(variant: u8) -> Self {
10 VariantError(variant)
11 }
12}
13
14#[cfg(not(tarpaulin_include))]
15impl fmt::Display for VariantError {
16 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
17 write!(f, "Invalid variant equal to {} has been provided", self.0)
18 }
19}
20
21impl Error for VariantError {}
22
23
24impl TryFrom<u8> for ELUVMethodVariant {
25 type Error = VariantError;
26
27 /// Coverts a value to ELUV method variant enum.
28 ///
29 /// # Examples
30 /// ## Convert number to variant
31 /// ```
32 /// use ptero::method::complex::eluv::ELUVMethodVariant;
33 /// use std::convert::TryFrom;
34 ///
35 /// assert_eq!(ELUVMethodVariant::try_from(1).unwrap(), ELUVMethodVariant::Variant1);
36 /// assert_eq!(ELUVMethodVariant::try_from(2).unwrap(), ELUVMethodVariant::Variant2);
37 /// assert_eq!(ELUVMethodVariant::try_from(3).unwrap(), ELUVMethodVariant::Variant3);
38 /// ```
39 /// ## Returns error if invalid number
40 /// ```should_panic
41 /// use ptero::method::complex::eluv::ELUVMethodVariant;
42 /// use ptero::method::variant::VariantError;
43 /// use std::convert::TryFrom;
44 ///
45 /// ELUVMethodVariant::try_from(4).unwrap();
46 /// ```
47 fn try_from(value: u8) -> Result<Self, Self::Error> {
48 match value {
49 1 => Ok(ELUVMethodVariant::Variant1),
50 2 => Ok(ELUVMethodVariant::Variant2),
51 3 => Ok(ELUVMethodVariant::Variant3),
52 _ => Err(VariantError::new(value))
53 }
54 }
55}
56
57impl TryFrom<u8> for ExtendedLineMethodVariant {
58 type Error = VariantError;
59
60 /// Coverts a value to Extended Line method variant enum.
61 ///
62 /// # Examples
63 /// ## Convert number to variant
64 /// ```
65 /// use ptero::method::complex::extended_line::ExtendedLineMethodVariant;
66 /// use std::convert::TryFrom;
67 ///
68 /// assert_eq!(ExtendedLineMethodVariant::try_from(1).unwrap(), ExtendedLineMethodVariant::Variant1);
69 /// assert_eq!(ExtendedLineMethodVariant::try_from(2).unwrap(), ExtendedLineMethodVariant::Variant2);
70 /// assert_eq!(ExtendedLineMethodVariant::try_from(3).unwrap(), ExtendedLineMethodVariant::Variant3);
71 /// ```
72 /// ## Returns error if invalid number
73 /// ```should_panic
74 /// use ptero::method::complex::extended_line::ExtendedLineMethodVariant;
75 /// use ptero::method::variant::VariantError;
76 /// use std::convert::TryFrom;
77 ///
78 /// ExtendedLineMethodVariant::try_from(4).unwrap();
79 /// ```
80 fn try_from(value: u8) -> Result<Self, Self::Error> {
81 match value {
82 1 => Ok(ExtendedLineMethodVariant::Variant1),
83 2 => Ok(ExtendedLineMethodVariant::Variant2),
84 3 => Ok(ExtendedLineMethodVariant::Variant3),
85 _ => Err(VariantError::new(value))
86 }
87 }
88}