serde_json_ext 0.1.9

A serde_json extension that provides configurable bytes serialization formats (hex, base64, default array)
Documentation
use serde::ser::SerializeStruct;

use crate::{Config, ser::value::WrapValue};

pub struct WrapSerializeStruct<'a, Struct> {
    pub inner: Struct,
    pub config: &'a Config,
}

impl<'a, Struct> SerializeStruct for WrapSerializeStruct<'a, Struct>
where
    Struct: serde::ser::SerializeStruct,
{
    type Ok = Struct::Ok;
    type Error = Struct::Error;

    fn serialize_field<T: ?Sized + serde::ser::Serialize>(
        &mut self,
        key: &'static str,
        value: &T,
    ) -> Result<(), Self::Error> {
        self.inner.serialize_field(
            key,
            &WrapValue {
                value,
                config: self.config,
            },
        )
    }

    fn skip_field(&mut self, key: &'static str) -> Result<(), Self::Error> {
        self.inner.skip_field(key)
    }

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