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}