casper_contract_sdk_codegen/
support.rs

1//! Support library for generated code.
2
3pub trait IntoResult<T, E> {
4    fn into_result(self) -> Result<T, E>;
5}
6
7pub trait IntoOption<T> {
8    fn into_option(self) -> Option<T>;
9}
10
11#[cfg(test)]
12mod tests {
13    use super::*;
14
15    #[derive(Debug, PartialEq, Eq)]
16    struct MyOk;
17    #[derive(Debug, PartialEq, Eq)]
18    struct MyErr;
19
20    #[derive(Debug, PartialEq, Eq)]
21
22    enum CustomResult {
23        Ok(MyOk),
24        Err(MyErr),
25    }
26
27    #[derive(Debug, PartialEq, Eq)]
28    enum CustomOption {
29        Some(MyOk),
30        None,
31    }
32
33    impl IntoResult<MyOk, MyErr> for CustomResult {
34        fn into_result(self) -> Result<MyOk, MyErr> {
35            match self {
36                CustomResult::Ok(ok) => Ok(ok),
37                CustomResult::Err(err) => Err(err),
38            }
39        }
40    }
41
42    impl IntoOption<MyOk> for CustomOption {
43        fn into_option(self) -> Option<MyOk> {
44            match self {
45                CustomOption::Some(value) => Some(value),
46                CustomOption::None => None,
47            }
48        }
49    }
50
51    #[test]
52    fn test_into_result() {
53        let ok = CustomResult::Ok(MyOk);
54        let err = CustomResult::Err(MyErr);
55
56        assert_eq!(ok.into_result(), Ok(MyOk));
57        assert_eq!(err.into_result(), Err(MyErr));
58    }
59
60    #[test]
61    fn test_into_option() {
62        let some = CustomOption::Some(MyOk);
63        let none = CustomOption::None;
64
65        assert_eq!(some.into_option(), Some(MyOk));
66        assert_eq!(none.into_option(), None);
67    }
68}