Quellcodebibliothek Statistik Leitseite products/Sources/formale Sprachen/C/Firefox/third_party/rust/serde_path_to_error/src/   (Firefox Browser Version 136.0.1©)  Datei vom 10.2.2025 mit Größe 27 kB image not shown  

Impressum ser.rs

  Sprache: Rust
 

use crate::wrap::Wrap;
use crate::{Chain, Error, Track};
use serde::ser::{self, Serialize};
use serde::serde_if_integer128;
use std::cell::Cell;
use std::fmt::Display;

/// Entry point for tracking path to Serialize error.
///
/// # Example
///
/// ```
/// # use serde_derive::Serialize;
/// #
/// use serde::Serialize;
/// use std::cell::RefCell;
///
/// #[derive(Serialize)]
/// struct Outer<'a> {
///     k: Inner<'a>,
/// }
///
/// #[derive(Serialize)]
/// struct Inner<'a> {
///     refcell: &'a RefCell<String>,
/// }
///
/// let refcell = RefCell::new(String::new());
/// let value = Outer {
///     k: Inner { refcell: &refcell },
/// };
///
/// // A RefCell cannot be serialized while it is still mutably borrowed.
/// let _borrowed = refcell.borrow_mut();
///
/// // Some Serializer.
/// let mut out = Vec::new();
/// let jser = &mut serde_json::Serializer::new(&mut out);
///
/// let result = serde_path_to_error::serialize(&value, jser);
/// match result {
///     Ok(_) => panic!("expected failure to serialize RefCell"),
///     Err(err) => {
///         let path = err.path().to_string();
///         assert_eq!(path, "k.refcell");
///     }
/// }
/// ```
pub fn serialize<T, S>(value: &T, serializer: S) -> Result<S::Ok, Error<S::Error>>
where
    T: ?Sized + Serialize,
    S: ser::Serializer,
{
    let mut track = Track::new();
    match T::serialize(value, Serializer::new(serializer, &mut track)) {
        Ok(ok) => Ok(ok),
        Err(err) => Err(Error {
            path: track.path(),
            original: err,
        }),
    }
}

/// Serializer adapter that records path to serialization errors.
///
/// # Example
///
/// ```
/// # use serde_derive::Serialize;
/// #
/// use serde::Serialize;
/// use std::collections::BTreeMap;
///
/// // Maps with a non-string key are not valid in JSON.
/// let mut inner_map = BTreeMap::new();
/// inner_map.insert(vec!['w', 'a', 't'], 0);
///
/// let mut outer_map = BTreeMap::new();
/// outer_map.insert("k", inner_map);
///
/// // Some Serializer.
/// let mut out = Vec::new();
/// let jser = &mut serde_json::Serializer::new(&mut out);
///
/// let mut track = serde_path_to_error::Track::new();
/// let ps = serde_path_to_error::Serializer::new(jser, &mut track);
///
/// match outer_map.serialize(ps) {
///     Ok(_) => panic!("expected failure to serialize non-string key"),
///     Err(_) => {
///         let path = track.path().to_string();
///         assert_eq!(path, "k");
///     }
/// }
/// ```
pub struct Serializer<'a, 'b, S> {
    ser: S,
    chain: &'a Chain<'a>,
    track: &'b Track,
}

impl<'a, 'b, S> Serializer<'a, 'b, S> {
    pub fn new(ser: S, track: &'b mut Track) -> Self {
        Serializer {
            ser,
            chain: &Chain::Root,
            track,
        }
    }
}

impl<'a, 'b, S> ser::Serializer for Serializer<'a, 'b, S>
where
    S: ser::Serializer,
{
    type Ok = S::Ok;
    type Error = S::Error;
    type SerializeSeq = WrapSeq<'a, 'b, S::SerializeSeq>;
    type SerializeTuple = WrapSeq<'a, 'b, S::SerializeTuple>;
    type SerializeTupleStruct = WrapSeq<'a, 'b, S::SerializeTupleStruct>;
    type SerializeTupleVariant = WrapSeq<'a, 'b, S::SerializeTupleVariant>;
    type SerializeMap = WrapMap<'a, 'b, S::SerializeMap>;
    type SerializeStruct = Wrap<'a, 'b, S::SerializeStruct>;
    type SerializeStructVariant = Wrap<'a, 'b, S::SerializeStructVariant>;

    fn serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_bool(v)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_i8(v)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_i16(v)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_i32(v)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_i64(v)
            .map_err(|err| track.trigger(chain, err))
    }

    serde_if_integer128! {
        fn serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error> {
            let chain = self.chain;
            let track = self.track;
            self.ser
                .serialize_i128(v)
                .map_err(|err| track.trigger(chain, err))
        }
    }

    fn serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_u8(v)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_u16(v)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_u32(v)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_u64(v)
            .map_err(|err| track.trigger(chain, err))
    }

    serde_if_integer128! {
        fn serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error> {
            let chain = self.chain;
            let track = self.track;
            self.ser
                .serialize_u128(v)
                .map_err(|err| track.trigger(chain, err))
        }
    }

    fn serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_f32(v)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_f64(v)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_char(self, v: char) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_char(v)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_str(v)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_bytes(v)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_none(self) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_none()
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_some<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
    where
        T: ?Sized + Serialize,
    {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_some(value)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_unit(self) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_unit()
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_unit_struct(name)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_unit_variant(
        self,
        name: &'static str,
        variant_index: u32,
        variant: &'static str,
    ) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_unit_variant(name, variant_index, variant)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_newtype_struct<T>(
        self,
        name: &'static str,
        value: &T,
    ) -> Result<Self::Ok, Self::Error>
    where
        T: ?Sized + Serialize,
    {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_newtype_struct(name, value)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_newtype_variant<T>(
        self,
        name: &'static str,
        variant_index: u32,
        variant: &'static str,
        value: &T,
    ) -> Result<Self::Ok, Self::Error>
    where
        T: ?Sized + Serialize,
    {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .serialize_newtype_variant(name, variant_index, variant, value)
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        match self.ser.serialize_seq(len) {
            Ok(delegate) => Ok(WrapSeq::new(delegate, chain, track)),
            Err(err) => Err(track.trigger(chain, err)),
        }
    }

    fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        match self.ser.serialize_tuple(len) {
            Ok(delegate) => Ok(WrapSeq::new(delegate, chain, track)),
            Err(err) => Err(track.trigger(chain, err)),
        }
    }

    fn serialize_tuple_struct(
        self,
        name: &'static str,
        len: usize,
    ) -> Result<Self::SerializeTupleStruct, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        match self.ser.serialize_tuple_struct(name, len) {
            Ok(delegate) => Ok(WrapSeq::new(delegate, chain, track)),
            Err(err) => Err(track.trigger(chain, err)),
        }
    }

    fn serialize_tuple_variant(
        self,
        name: &'static str,
        variant_index: u32,
        variant: &'static str,
        len: usize,
    ) -> Result<Self::SerializeTupleVariant, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        match self
            .ser
            .serialize_tuple_variant(name, variant_index, variant, len)
        {
            Ok(delegate) => Ok(WrapSeq::new(delegate, chain, track)),
            Err(err) => Err(track.trigger(chain, err)),
        }
    }

    fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        match self.ser.serialize_map(len) {
            Ok(delegate) => Ok(WrapMap::new(delegate, chain, track)),
            Err(err) => Err(track.trigger(chain, err)),
        }
    }

    fn serialize_struct(
        self,
        name: &'static str,
        len: usize,
    ) -> Result<Self::SerializeStruct, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        match self.ser.serialize_struct(name, len) {
            Ok(delegate) => Ok(Wrap::new(delegate, chain, track)),
            Err(err) => Err(track.trigger(chain, err)),
        }
    }

    fn serialize_struct_variant(
        self,
        name: &'static str,
        variant_index: u32,
        variant: &'static str,
        len: usize,
    ) -> Result<Self::SerializeStructVariant, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        match self
            .ser
            .serialize_struct_variant(name, variant_index, variant, len)
        {
            Ok(delegate) => Ok(Wrap::new(delegate, chain, track)),
            Err(err) => Err(track.trigger(chain, err)),
        }
    }

    fn collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
    where
        T: ?Sized + Display,
    {
        let chain = self.chain;
        let track = self.track;
        self.ser
            .collect_str(value)
            .map_err(|err| track.trigger(chain, err))
    }

    fn is_human_readable(&self) -> bool {
        self.ser.is_human_readable()
    }
}

struct TrackedValue<'a, 'b, X> {
    value: X,
    chain: &'a Chain<'a>,
    track: &'b Track,
}

impl<'a, 'b, X> TrackedValue<'a, 'b, X> {
    fn new(value: X, chain: &'a Chain<'a>, track: &'b Track) -> Self {
        TrackedValue {
            value,
            chain,
            track,
        }
    }
}

impl<'a, 'b, X> Serialize for TrackedValue<'a, 'b, X>
where
    X: Serialize,
{
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: ser::Serializer,
    {
        let chain = self.chain;
        let track = self.track;
        self.value
            .serialize(Serializer {
                ser: serializer,
                chain,
                track,
            })
            .map_err(|err| track.trigger(chain, err))
    }
}

pub struct WrapSeq<'a, 'b, S> {
    delegate: S,
    chain: &'a Chain<'a>,
    index: usize,
    track: &'b Track,
}

impl<'a, 'b, S> WrapSeq<'a, 'b, S> {
    fn new(delegate: S, chain: &'a Chain<'a>, track: &'b Track) -> Self {
        WrapSeq {
            delegate,
            chain,
            index: 0,
            track,
        }
    }
}

impl<'a, 'b, S> ser::SerializeSeq for WrapSeq<'a, 'b, S>
where
    S: ser::SerializeSeq,
{
    type Ok = S::Ok;
    type Error = S::Error;

    fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
    where
        T: ?Sized + Serialize,
    {
        let parent = self.chain;
        let chain = Chain::Seq {
            parent,
            index: self.index,
        };
        let track = self.track;
        self.index += 1;
        self.delegate
            .serialize_element(&TrackedValue::new(value, &chain, track))
            .map_err(|err| track.trigger(parent, err))
    }

    fn end(self) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.delegate.end().map_err(|err| track.trigger(chain, err))
    }
}

impl<'a, 'b, S> ser::SerializeTuple for WrapSeq<'a, 'b, S>
where
    S: ser::SerializeTuple,
{
    type Ok = S::Ok;
    type Error = S::Error;

    fn serialize_element<T>(&mut self, value: &T) -> Result<(), Self::Error>
    where
        T: ?Sized + Serialize,
    {
        let parent = self.chain;
        let chain = Chain::Seq {
            parent,
            index: self.index,
        };
        let track = self.track;
        self.index += 1;
        self.delegate
            .serialize_element(&TrackedValue::new(value, &chain, track))
            .map_err(|err| track.trigger(parent, err))
    }

    fn end(self) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.delegate.end().map_err(|err| track.trigger(chain, err))
    }
}

impl<'a, 'b, S> ser::SerializeTupleStruct for WrapSeq<'a, 'b, S>
where
    S: ser::SerializeTupleStruct,
{
    type Ok = S::Ok;
    type Error = S::Error;

    fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
    where
        T: ?Sized + Serialize,
    {
        let parent = self.chain;
        let chain = Chain::Seq {
            parent,
            index: self.index,
        };
        let track = self.track;
        self.index += 1;
        self.delegate
            .serialize_field(&TrackedValue::new(value, &chain, track))
            .map_err(|err| track.trigger(parent, err))
    }

    fn end(self) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.delegate.end().map_err(|err| track.trigger(chain, err))
    }
}

impl<'a, 'b, S> ser::SerializeTupleVariant for WrapSeq<'a, 'b, S>
where
    S: ser::SerializeTupleVariant,
{
    type Ok = S::Ok;
    type Error = S::Error;

    fn serialize_field<T>(&mut self, value: &T) -> Result<(), Self::Error>
    where
        T: ?Sized + Serialize,
    {
        let parent = self.chain;
        let chain = Chain::Seq {
            parent,
            index: self.index,
        };
        let track = self.track;
        self.index += 1;
        self.delegate
            .serialize_field(&TrackedValue::new(value, &chain, track))
            .map_err(|err| track.trigger(parent, err))
    }

    fn end(self) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.delegate.end().map_err(|err| track.trigger(chain, err))
    }
}

pub struct WrapMap<'a, 'b, S> {
    delegate: S,
    chain: &'a Chain<'a>,
    key: Cell<Option<String>>,
    track: &'b Track,
}

impl<'a, 'b, S> WrapMap<'a, 'b, S> {
    fn new(delegate: S, chain: &'a Chain<'a>, track: &'b Track) -> Self {
        WrapMap {
            delegate,
            chain,
            key: Cell::new(None),
            track,
        }
    }
}

impl<'a, 'b, S> ser::SerializeMap for WrapMap<'a, 'b, S>
where
    S: ser::SerializeMap,
{
    type Ok = S::Ok;
    type Error = S::Error;

    fn serialize_key<T>(&mut self, key: &T) -> Result<(), Self::Error>
    where
        T: ?Sized + Serialize,
    {
        let chain = self.chain;
        let track = self.track;
        self.key.set(None);
        self.delegate
            .serialize_key(&CaptureKey::new(&self.key, key))
            .map_err(|err| track.trigger(chain, err))
    }

    fn serialize_value<T>(&mut self, value: &T) -> Result<(), Self::Error>
    where
        T: ?Sized + Serialize,
    {
        let parent = self.chain;
        let chain = match self.key.take() {
            Some(key) => Chain::Map { parent, key },
            None => Chain::NonStringKey { parent },
        };
        let track = self.track;
        self.delegate
            .serialize_value(&TrackedValue::new(value, &chain, track))
            .map_err(|err| track.trigger(parent, err))
    }

    fn end(self) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.delegate.end().map_err(|err| track.trigger(chain, err))
    }
}

impl<'a, 'b, S> ser::SerializeStruct for Wrap<'a, 'b, S>
where
    S: ser::SerializeStruct,
{
    type Ok = S::Ok;
    type Error = S::Error;

    fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
    where
        T: ?Sized + Serialize,
    {
        let parent = self.chain;
        let chain = Chain::Struct { parent, key };
        let track = self.track;
        self.delegate
            .serialize_field(key, &TrackedValue::new(value, &chain, track))
            .map_err(|err| track.trigger(parent, err))
    }

    fn end(self) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.delegate.end().map_err(|err| track.trigger(chain, err))
    }

    fn skip_field(&mut self, key: &'static str) -> Result<(), Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.delegate
            .skip_field(key)
            .map_err(|err| track.trigger(chain, err))
    }
}

impl<'a, 'b, S> ser::SerializeStructVariant for Wrap<'a, 'b, S>
where
    S: ser::SerializeStructVariant,
{
    type Ok = S::Ok;
    type Error = S::Error;

    fn serialize_field<T>(&mut self, key: &'static str, value: &T) -> Result<(), Self::Error>
    where
        T: ?Sized + Serialize,
    {
        let parent = self.chain;
        let chain = Chain::Struct { parent, key };
        let track = self.track;
        self.delegate
            .serialize_field(key, &TrackedValue::new(value, &chain, track))
            .map_err(|err| track.trigger(parent, err))
    }

    fn end(self) -> Result<Self::Ok, Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.delegate.end().map_err(|err| track.trigger(chain, err))
    }

    fn skip_field(&mut self, key: &'static str) -> Result<(), Self::Error> {
        let chain = self.chain;
        let track = self.track;
        self.delegate
            .skip_field(key)
            .map_err(|err| track.trigger(chain, err))
    }
}

struct CaptureKey<'a, T> {
    out: &'a Cell<Option<String>>,
    delegate: T,
}

impl<'a, T> CaptureKey<'a, T> {
    fn new(out: &'a Cell<Option<String>>, delegate: T) -> Self {
        CaptureKey { out, delegate }
    }
}

impl<'a, T> Serialize for CaptureKey<'a, T>
where
    T: Serialize,
{
    fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
    where
        S: ser::Serializer,
    {
        self.delegate
            .serialize(CaptureKey::new(self.out, serializer))
    }
}

impl<'a, S> ser::Serializer for CaptureKey<'a, S>
where
    S: ser::Serializer,
{
    type Ok = S::Ok;
    type Error = S::Error;
    type SerializeSeq = S::SerializeSeq;
    type SerializeTuple = S::SerializeTuple;
    type SerializeTupleStruct = S::SerializeTupleStruct;
    type SerializeTupleVariant = S::SerializeTupleVariant;
    type SerializeMap = S::SerializeMap;
    type SerializeStruct = S::SerializeStruct;
    type SerializeStructVariant = S::SerializeStructVariant;

    fn serialize_bool(self, v: bool) -> Result<Self::Ok, Self::Error> {
        self.out.set(Some(v.to_string()));
        self.delegate.serialize_bool(v)
    }

    fn serialize_i8(self, v: i8) -> Result<Self::Ok, Self::Error> {
        self.out.set(Some(v.to_string()));
        self.delegate.serialize_i8(v)
    }

    fn serialize_i16(self, v: i16) -> Result<Self::Ok, Self::Error> {
        self.out.set(Some(v.to_string()));
        self.delegate.serialize_i16(v)
    }

    fn serialize_i32(self, v: i32) -> Result<Self::Ok, Self::Error> {
        self.out.set(Some(v.to_string()));
        self.delegate.serialize_i32(v)
    }

    fn serialize_i64(self, v: i64) -> Result<Self::Ok, Self::Error> {
        self.out.set(Some(v.to_string()));
        self.delegate.serialize_i64(v)
    }

    serde_if_integer128! {
        fn serialize_i128(self, v: i128) -> Result<Self::Ok, Self::Error> {
            self.out.set(Some(v.to_string()));
            self.delegate.serialize_i128(v)
        }
    }

    fn serialize_u8(self, v: u8) -> Result<Self::Ok, Self::Error> {
        self.out.set(Some(v.to_string()));
        self.delegate.serialize_u8(v)
    }

    fn serialize_u16(self, v: u16) -> Result<Self::Ok, Self::Error> {
        self.out.set(Some(v.to_string()));
        self.delegate.serialize_u16(v)
    }

    fn serialize_u32(self, v: u32) -> Result<Self::Ok, Self::Error> {
        self.out.set(Some(v.to_string()));
        self.delegate.serialize_u32(v)
    }

    fn serialize_u64(self, v: u64) -> Result<Self::Ok, Self::Error> {
        self.out.set(Some(v.to_string()));
        self.delegate.serialize_u64(v)
    }

    serde_if_integer128! {
        fn serialize_u128(self, v: u128) -> Result<Self::Ok, Self::Error> {
            self.out.set(Some(v.to_string()));
            self.delegate.serialize_u128(v)
        }
    }

    fn serialize_f32(self, v: f32) -> Result<Self::Ok, Self::Error> {
        self.delegate.serialize_f32(v)
    }

    fn serialize_f64(self, v: f64) -> Result<Self::Ok, Self::Error> {
        self.delegate.serialize_f64(v)
    }

    fn serialize_char(self, v: char) -> Result<Self::Ok, Self::Error> {
        self.delegate.serialize_char(v)
    }

    fn serialize_str(self, v: &str) -> Result<Self::Ok, Self::Error> {
        self.out.set(Some(v.to_owned()));
        self.delegate.serialize_str(v)
    }

    fn serialize_bytes(self, v: &[u8]) -> Result<Self::Ok, Self::Error> {
        self.delegate.serialize_bytes(v)
    }

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

    fn serialize_some<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
    where
        T: ?Sized + Serialize,
    {
        self.delegate
            .serialize_some(&CaptureKey::new(self.out, value))
    }

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

    fn serialize_unit_struct(self, name: &'static str) -> Result<Self::Ok, Self::Error> {
        self.delegate.serialize_unit_struct(name)
    }

    fn serialize_unit_variant(
        self,
        name: &'static str,
        variant_index: u32,
        variant: &'static str,
    ) -> Result<Self::Ok, Self::Error> {
        self.out.set(Some(variant.to_owned()));
        self.delegate
            .serialize_unit_variant(name, variant_index, variant)
    }

    fn serialize_newtype_struct<T>(
        self,
        name: &'static str,
        value: &T,
    ) -> Result<Self::Ok, Self::Error>
    where
        T: ?Sized + Serialize,
    {
        self.delegate
            .serialize_newtype_struct(name, &CaptureKey::new(self.out, value))
    }

    fn serialize_newtype_variant<T>(
        self,
        name: &'static str,
        variant_index: u32,
        variant: &'static str,
        value: &T,
    ) -> Result<Self::Ok, Self::Error>
    where
        T: ?Sized + Serialize,
    {
        self.delegate
            .serialize_newtype_variant(name, variant_index, variant, value)
    }

    fn serialize_seq(self, len: Option<usize>) -> Result<Self::SerializeSeq, Self::Error> {
        self.delegate.serialize_seq(len)
    }

    fn serialize_tuple(self, len: usize) -> Result<Self::SerializeTuple, Self::Error> {
        self.delegate.serialize_tuple(len)
    }

    fn serialize_tuple_struct(
        self,
        name: &'static str,
        len: usize,
    ) -> Result<Self::SerializeTupleStruct, Self::Error> {
        self.delegate.serialize_tuple_struct(name, len)
    }

    fn serialize_tuple_variant(
        self,
        name: &'static str,
        variant_index: u32,
        variant: &'static str,
        len: usize,
    ) -> Result<Self::SerializeTupleVariant, Self::Error> {
        self.delegate
            .serialize_tuple_variant(name, variant_index, variant, len)
    }

    fn serialize_map(self, len: Option<usize>) -> Result<Self::SerializeMap, Self::Error> {
        self.delegate.serialize_map(len)
    }

    fn serialize_struct(
        self,
        name: &'static str,
        len: usize,
    ) -> Result<Self::SerializeStruct, Self::Error> {
        self.delegate.serialize_struct(name, len)
    }

    fn serialize_struct_variant(
        self,
        name: &'static str,
        variant_index: u32,
        variant: &'static str,
        len: usize,
    ) -> Result<Self::SerializeStructVariant, Self::Error> {
        self.delegate
            .serialize_struct_variant(name, variant_index, variant, len)
    }

    fn collect_seq<I>(self, iter: I) -> Result<Self::Ok, Self::Error>
    where
        I: IntoIterator,
        I::Item: Serialize,
    {
        self.delegate.collect_seq(iter)
    }

    fn collect_map<K, V, I>(self, iter: I) -> Result<Self::Ok, Self::Error>
    where
        K: Serialize,
        V: Serialize,
        I: IntoIterator<Item = (K, V)>,
    {
        self.delegate.collect_map(iter)
    }

    fn collect_str<T>(self, value: &T) -> Result<Self::Ok, Self::Error>
    where
        T: ?Sized + Display,
    {
        self.out.set(Some(value.to_string()));
        self.delegate.collect_str(value)
    }

    fn is_human_readable(&self) -> bool {
        self.delegate.is_human_readable()
    }
}

Messung V0.5 in Prozent
C=88 H=93 G=90

¤ Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.0.4Bemerkung:  (vorverarbeitet am  2026-06-20) ¤

*Bot Zugriff






Wurzel

Suchen

PVS Prover

Isabelle Prover

NIST Cobol Testsuite

Cephes Mathematical Library

Vienna Development Method

Haftungshinweis

Die Informationen auf dieser Webseite wurden nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit, noch Qualität der bereit gestellten Informationen zugesichert.

Bemerkung:

Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.