serde_either 0.2.1

Simple set to enums to deserialize and serialize data that can either be string, struct or vec
Documentation
use crate::enums::{SingleOrVec, StringOrStruct, StringOrStructOrVec};
use serde::ser::{Serialize, Serializer};

impl<S, V> Serialize for StringOrStructOrVec<S, V>
where
    S: Serialize,
    V: Serialize,
{
    fn serialize<Se>(&self, serializer: Se) -> Result<Se::Ok, Se::Error>
    where
        Se: Serializer,
    {
        match self {
            StringOrStructOrVec::String(s) => s.serialize(serializer),
            StringOrStructOrVec::Struct(s) => s.serialize(serializer),
            StringOrStructOrVec::Vec(v) => v.serialize(serializer),
        }
    }
}

impl<S> Serialize for StringOrStruct<S>
where
    S: Serialize,
{
    fn serialize<Se>(&self, serializer: Se) -> Result<Se::Ok, Se::Error>
    where
        Se: Serializer,
    {
        match self {
            StringOrStruct::String(s) => s.serialize(serializer),
            StringOrStruct::Struct(s) => s.serialize(serializer),
        }
    }
}

impl<S> Serialize for SingleOrVec<S>
where
    S: Serialize,
{
    fn serialize<Se>(&self, serializer: Se) -> Result<Se::Ok, Se::Error>
    where
        Se: Serializer,
    {
        match self {
            SingleOrVec::Single(s) => s.serialize(serializer),
            SingleOrVec::Vec(s) => s.serialize(serializer),
        }
    }
}