use crate::error::Result;
use crate::types::{ParameterCollection, UnknownFields};
pub trait FromParams: Sized {
fn from_params(params: &ParameterCollection) -> Result<Self>;
fn from_params_preserving(params: &ParameterCollection) -> Result<(Self, UnknownFields)> {
let value = Self::from_params(params)?;
Ok((value, UnknownFields::default()))
}
}
pub trait ToParams {
fn to_params(&self) -> ParameterCollection {
let mut params = ParameterCollection::new();
self.append_to_params(&mut params);
params
}
fn append_to_params(&self, params: &mut ParameterCollection);
}
impl<T: FromParams> FromParams for Option<T> {
fn from_params(params: &ParameterCollection) -> Result<Self> {
match T::from_params(params) {
Ok(v) => Ok(Some(v)),
Err(_) => Ok(None),
}
}
}
impl<T: ToParams> ToParams for Option<T> {
fn append_to_params(&self, params: &mut ParameterCollection) {
if let Some(v) = self {
v.append_to_params(params);
}
}
}