use crate::RemovableValue;
use crate::UrlData;
use crate::UrlDataBuilder;
use crate::UrlDataInlineDataset;
use serde::Serialize;
pub fn iter_to_data<T>(v: impl Iterator<Item = T>) -> UrlData
where
T: Serialize,
{
UrlDataBuilder::default()
.values(iter_to_data_inline_dataset(v))
.build()
.unwrap()
}
fn iter_to_data_inline_dataset<T>(v: impl Iterator<Item = T>) -> UrlDataInlineDataset
where
T: Serialize,
{
let values = v
.map(serde_json::to_value)
.collect::<Result<Vec<_>, _>>()
.expect("TODO manage error in iter_to_dataInlineDataSet");
UrlDataInlineDataset::UnionArray(values)
}
impl<T> From<&[T]> for UrlData
where
T: Serialize,
{
fn from(v: &[T]) -> Self {
iter_to_data(v.iter())
}
}
impl<T> From<&[T]> for RemovableValue<UrlData>
where
T: Serialize,
{
fn from(v: &[T]) -> Self {
RemovableValue::Specified(v.into())
}
}
impl<T> From<&Vec<T>> for UrlData
where
T: Serialize,
{
fn from(v: &Vec<T>) -> Self {
iter_to_data(v.iter())
}
}
impl<T> From<&Vec<T>> for RemovableValue<UrlData>
where
T: Serialize,
{
fn from(v: &Vec<T>) -> Self {
RemovableValue::Specified(v.into())
}
}