cardano_serialization_lib/
traits.rs

1pub trait NoneOrEmpty {
2    fn is_none_or_empty(&self) -> bool;
3}
4
5pub trait EmptyToNone: Sized {
6   fn empty_to_none(self) -> Option<Self>;
7}
8
9impl<T: NoneOrEmpty> NoneOrEmpty for &T {
10    fn is_none_or_empty(&self) -> bool {
11        (*self).is_none_or_empty()
12    }
13}
14
15impl<T: NoneOrEmpty> NoneOrEmpty for Option<T> {
16    fn is_none_or_empty(&self) -> bool {
17        match &self {
18            Some(x) => x.is_none_or_empty(),
19            None => true,
20        }
21    }
22}
23
24impl<T: NoneOrEmpty> EmptyToNone for T {
25    fn empty_to_none(self) -> Option<Self> {
26        if self.is_none_or_empty() {
27            None
28        } else {
29            Some(self)
30        }
31    }
32}