Skip to main content

luminos_contracts/support/interacts_with_data/contains/
result.rs

1use std::result::Result;
2
3use super::super::{Contains, InteractsWithData, IntoData};
4
5impl<T, E> Contains<T> for Result<T, E> {
6    fn contains_item(&self, key: &T) -> bool {
7        self.is_ok()
8    }
9}
10
11impl<T: PartialEq, E> InteractsWithData for Result<T, E> {
12    type Value = Result<T, E>;
13    type Item = T;
14
15    fn data(&self) -> &Self::Value {
16        self
17    }
18
19    fn exists(&self, key: &Self::Item) -> bool {
20        match self.data() {
21            Ok(value) => value == key,
22            _ => false,
23        }
24    }
25}
26
27
28#[cfg(test)]
29mod tests {
30    use super::*;
31
32    #[test]
33    fn test_result_interacts_with_data() {
34        let result: Result<&str, ()> = Ok("a");
35
36        let expected: Result<&str, ()> = Ok("a");
37        assert_eq!(result.all(), expected);
38        
39        assert!(result.exists(&"a")); 
40        assert!(!result.exists(&"c")); 
41    }
42}