usecrate::ser::key::KeySink; usecrate::ser::part::PartSerializer; usecrate::ser::value::ValueSink; usecrate::ser::Error; use form_urlencoded::Serializer as UrlEncodedSerializer; use form_urlencoded::Target as UrlEncodedTarget; use serde::ser; use std::borrow::Cow; use std::mem;
impl<'input, 'target, Target> ser::Serializer for PairSerializer<'input, 'target, Target> where
Target: 'target + UrlEncodedTarget,
{ type Ok = (); type Error = Error; type SerializeSeq = ser::Impossible<(), Error>; type SerializeTuple = Self; type SerializeTupleStruct = ser::Impossible<(), Error>; type SerializeTupleVariant = ser::Impossible<(), Error>; type SerializeMap = ser::Impossible<(), Error>; type SerializeStruct = ser::Impossible<(), Error>; type SerializeStructVariant = ser::Impossible<(), Error>;
impl<'input, 'target, Target> ser::SerializeTuple for PairSerializer<'input, 'target, Target> where
Target: 'target + UrlEncodedTarget,
{ type Ok = (); type Error = Error;
fn serialize_element<T: ?Sized + ser::Serialize>(
&mutself,
value: &T,
) -> Result<(), Error> { match mem::replace(&mutself.state, PairState::Done) {
PairState::WaitingForKey => { let key_sink = KeySink::new(|key| Ok(key.into())); let key_serializer = PartSerializer::new(key_sink); self.state = PairState::WaitingForValue {
key: value.serialize(key_serializer)?,
};
Ok(())
}
PairState::WaitingForValue { key } => { let result = { let value_sink = ValueSink::new(self.urlencoder, &key); let value_serializer = PartSerializer::new(value_sink);
value.serialize(value_serializer)
}; if result.is_ok() { self.state = PairState::Done;
} else { self.state = PairState::WaitingForValue { key };
}
result
}
PairState::Done => Err(Error::done()),
}
}
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.