yaup 0.3.1

URL parameters serialization
Documentation
use std::io;

pub struct Serializer<'a, W> {
    writer: &'a mut W,
    first_param: bool,
}

impl<'a, W> Serializer<'a, W>
where
    W: io::Write,
{
    pub fn new(writer: &'a mut W) -> Self {
        Serializer {
            writer,
            first_param: true,
        }
    }
}

impl<'a, W> ::serde::ser::SerializeSeq for Serializer<'a, W>
where
    W: io::Write,
{
    type Ok = ();
    type Error = crate::Error;

    fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
    where
        T: ?Sized + serde::Serialize,
    {
        if self.first_param {
            self.first_param = false;
        } else {
            write!(self.writer, ",")?;
        }

        let simple = super::simple::Serializer::new_from_seq(&mut *self.writer);
        value.serialize(simple)?;
        Ok(())
    }

    fn end(self) -> Result<Self::Ok, Self::Error> {
        Ok(())
    }
}

impl<'a, W> ::serde::ser::SerializeTuple for Serializer<'a, W>
where
    W: io::Write,
{
    type Ok = ();
    type Error = crate::Error;

    fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
    where
        T: ?Sized + serde::Serialize,
    {
        ::serde::ser::SerializeSeq::serialize_element(self, value)
    }

    fn end(self) -> Result<Self::Ok, Self::Error> {
        Ok(())
    }
}

impl<'a, W> ::serde::ser::SerializeTupleStruct for Serializer<'a, W>
where
    W: io::Write,
{
    type Ok = ();
    type Error = crate::Error;

    fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
    where
        T: ?Sized + serde::Serialize,
    {
        ::serde::ser::SerializeSeq::serialize_element(self, value)
    }

    fn end(self) -> Result<Self::Ok, Self::Error> {
        Ok(())
    }
}

impl<'a, W> ::serde::ser::SerializeTupleVariant for Serializer<'a, W>
where
    W: io::Write,
{
    type Ok = ();
    type Error = crate::Error;

    fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
    where
        T: ?Sized + serde::Serialize,
    {
        ::serde::ser::SerializeSeq::serialize_element(self, value)
    }

    fn end(self) -> Result<Self::Ok, Self::Error> {
        Ok(())
    }
}