brasilapi_client/
commons.rs

1use serde::{Deserialize, Serialize};
2
3#[derive(Debug, Deserialize, Serialize)]
4#[serde(deny_unknown_fields)]
5#[serde(untagged)]
6pub enum EmptyOption<T> {
7    Some(T),
8    None {},
9}
10
11// Helpers to make it more ergonomic
12
13impl<T> From<EmptyOption<T>> for Option<T> {
14    fn from(empty_option: EmptyOption<T>) -> Option<T> {
15        match empty_option {
16            EmptyOption::Some(option) => Some(option),
17            EmptyOption::None {} => None,
18        }
19    }
20}
21
22impl<T> From<Option<T>> for EmptyOption<T> {
23    fn from(option: Option<T>) -> EmptyOption<T> {
24        match option {
25            Some(option) => EmptyOption::Some(option),
26            None {} => EmptyOption::None {},
27        }
28    }
29}
30
31impl<T> EmptyOption<T> {
32    pub fn into_option(self) -> Option<T> {
33        self.into()
34    }
35    pub fn as_option(&self) -> Option<&T> {
36        match self {
37            EmptyOption::Some(option) => Some(option),
38            EmptyOption::None {} => None,
39        }
40    }
41}