use crate::schema::*;
use serde_json;
impl Vegalite {
pub fn to_string(&self) -> Result<String, serde_json::Error> {
serde_json::to_string(self)
}
}
macro_rules! from_into_string{
( $( $x:ident ),* $(,)? ) => {
$(
impl From<&str> for $x
{
fn from(v: &str) -> Self {
$x::String(v.into())
}
}
)*
};
}
from_into_string!(
ClearUnion,
Color,
ConditionalAxisPropertyFontStyleNull,
ConditionalAxisPropertyStringNull,
ConditionalPredicateValueDefTextExprRefText,
ConditionalValueDefGradientStringNullExprRefValue,
ConditionalValueDefNumberExprRefPredicateComposition,
ConditionalValueDefNumberExprRefSelectionComposition,
ConditionalValueDefTextExprRefText,
Day,
DomainElement,
Equal,
Field,
FluffyRange,
FluffyStream,
Format,
GridColorUnion,
InitValue,
InlineDatasetValue,
LegendText,
LegendUnion,
Lt,
MarkConfigExprOrSignalRefColor,
MarkConfigExprOrSignalRefFill,
MarkConfigExprOrSignalRefTooltip,
Month,
OnUnion,
PredicateCompositionElement,
PrimitiveValue,
PurpleStream,
RangeM,
RangeText,
Scheme,
SelectionCompositionElement,
SelectionInit,
SelectionInitInterval,
StyleColor,
StyleFill,
StyleTooltip,
TitleUnion,
Translate,
UrlDataInlineDataset,
);
macro_rules! from_into_array_of_str{
( $( $e:ident::$v:ident(Vec<$t:ident>) ),* $(,)? ) => {
from_into_array_of_str!($( $e::$v(Vec<$t>), )*, 32,31,30,29,28,27,26,25,24,23,
22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0);
};
( $( $e:ident::$v:ident(Vec<$t:ident>) ,)*, $end:expr ) => {
$(
impl From<Vec<&str>> for $e
{
fn from(v: Vec<&str>) -> Self {
$e::$v(v.iter().map(|s| $t::String(s.to_string())).collect())
}
}
impl From<Vec<String>> for $e
{
fn from(v: Vec<String>) -> Self {
$e::$v(v.into_iter().map($t::String).collect())
}
}
)*
};
( $( $e:ident::$v:ident(Vec<$t:ident>) ,)*, $i:expr, $($tail:expr),+ ) => {
$(
impl From<[&str; $i]> for $e
{
fn from(v: [&str; $i]) -> Self {
$e::$v(v.iter().map(|s| $t::String(s.to_string())).collect())
}
}
)*
from_into_array_of_str!($( $e::$v(Vec<$t>), )*, $($tail),*);
};
}
macro_rules! from_into_array_of_str_opt{
( $( $e:ident::$v:ident(Vec<Option<$t:ident>>) ),* $(,)? ) => {
from_into_array_of_str_opt!($( $e::$v(Vec<Option<$t>>), )*, 32,31,30,29,28,27,26,25,24,23,
22,21,20,19,18,17,16,15,14,13,12,11,10,9,8,7,6,5,4,3,2,1,0);
};
( $( $e:ident::$v:ident(Vec<Option<$t:ident>>) ,)*, $end:expr ) => {
$(
impl From<Vec<&str>> for $e
{
fn from(v: Vec<&str>) -> Self {
$e::$v(v.iter().map(|s| Some($t::String(s.to_string()))).collect())
}
}
impl From<Vec<String>> for $e
{
fn from(v: Vec<String>) -> Self {
$e::$v(v.into_iter().map($t::String).map(|v| Some(v)).collect())
}
}
)*
};
( $( $e:ident::$v:ident(Vec<Option<$t:ident>>) ,)*, $i:expr, $($tail:expr),+ ) => {
$(
impl From<[&str; $i]> for $e
{
fn from(v: [&str; $i]) -> Self {
$e::$v(v.iter().map(|s| Some($t::String(s.to_string()))).collect())
}
}
)*
from_into_array_of_str_opt!($( $e::$v(Vec<Option<$t>>), )*, $($tail),*);
};
}
from_into_array_of_str!(
FluffySortArray::UnionArray(Vec<SelectionInitInterval>),
InitValue::UnionArray(Vec<SelectionInitInterval>),
PurpleSortArray::UnionArray(Vec<SelectionInitInterval>),
ScaleRange::UnionArray(Vec<FluffyRange>),
SortUnion::UnionArray(Vec<SelectionInitInterval>),
Values::UnionArray(Vec<SelectionInitInterval>),
);
from_into_array_of_str_opt!(DomainUnion::UnionArray(Vec<Option<DomainElement>>),);