summaryrefslogtreecommitdiffstats
path: root/third_party/rust/serde/src/ser/fmt.rs
diff options
context:
space:
mode:
Diffstat (limited to 'third_party/rust/serde/src/ser/fmt.rs')
-rw-r--r--third_party/rust/serde/src/ser/fmt.rs174
1 files changed, 174 insertions, 0 deletions
diff --git a/third_party/rust/serde/src/ser/fmt.rs b/third_party/rust/serde/src/ser/fmt.rs
new file mode 100644
index 0000000000..e7e09a1bfe
--- /dev/null
+++ b/third_party/rust/serde/src/ser/fmt.rs
@@ -0,0 +1,174 @@
+use lib::*;
+use ser::{Error, Impossible, Serialize, Serializer};
+
+impl Error for fmt::Error {
+ fn custom<T: Display>(_msg: T) -> Self {
+ fmt::Error
+ }
+}
+
+macro_rules! fmt_primitives {
+ ($($f:ident: $t:ty,)*) => {
+ $(
+ fn $f(self, v: $t) -> fmt::Result {
+ Display::fmt(&v, self)
+ }
+ )*
+ };
+}
+
+/// ```edition2018
+/// use serde::Serialize;
+/// use std::fmt::{self, Display};
+///
+/// #[derive(Serialize)]
+/// #[serde(rename_all = "kebab-case")]
+/// pub enum MessageType {
+/// StartRequest,
+/// EndRequest,
+/// }
+///
+/// impl Display for MessageType {
+/// fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
+/// self.serialize(f)
+/// }
+/// }
+/// ```
+impl<'a, 'b> Serializer for &'a mut fmt::Formatter<'b> {
+ type Ok = ();
+ type Error = fmt::Error;
+ type SerializeSeq = Impossible<(), fmt::Error>;
+ type SerializeTuple = Impossible<(), fmt::Error>;
+ type SerializeTupleStruct = Impossible<(), fmt::Error>;
+ type SerializeTupleVariant = Impossible<(), fmt::Error>;
+ type SerializeMap = Impossible<(), fmt::Error>;
+ type SerializeStruct = Impossible<(), fmt::Error>;
+ type SerializeStructVariant = Impossible<(), fmt::Error>;
+
+ fmt_primitives! {
+ serialize_bool: bool,
+ serialize_i8: i8,
+ serialize_i16: i16,
+ serialize_i32: i32,
+ serialize_i64: i64,
+ serialize_u8: u8,
+ serialize_u16: u16,
+ serialize_u32: u32,
+ serialize_u64: u64,
+ serialize_f32: f32,
+ serialize_f64: f64,
+ serialize_char: char,
+ serialize_str: &str,
+ serialize_unit_struct: &'static str,
+ }
+
+ serde_if_integer128! {
+ fmt_primitives! {
+ serialize_i128: i128,
+ serialize_u128: u128,
+ }
+ }
+
+ fn serialize_unit_variant(
+ self,
+ _name: &'static str,
+ _variant_index: u32,
+ variant: &'static str,
+ ) -> fmt::Result {
+ Display::fmt(variant, self)
+ }
+
+ fn serialize_newtype_struct<T: ?Sized>(self, _name: &'static str, value: &T) -> fmt::Result
+ where
+ T: Serialize,
+ {
+ Serialize::serialize(value, self)
+ }
+
+ fn serialize_bytes(self, _v: &[u8]) -> fmt::Result {
+ Err(fmt::Error)
+ }
+
+ fn serialize_none(self) -> fmt::Result {
+ Err(fmt::Error)
+ }
+
+ fn serialize_some<T: ?Sized>(self, _value: &T) -> fmt::Result
+ where
+ T: Serialize,
+ {
+ Err(fmt::Error)
+ }
+
+ fn serialize_unit(self) -> fmt::Result {
+ Err(fmt::Error)
+ }
+
+ fn serialize_newtype_variant<T: ?Sized>(
+ self,
+ _name: &'static str,
+ _variant_index: u32,
+ _variant: &'static str,
+ _value: &T,
+ ) -> fmt::Result
+ where
+ T: Serialize,
+ {
+ Err(fmt::Error)
+ }
+
+ fn serialize_seq(self, _len: Option<usize>) -> Result<Self::SerializeSeq, fmt::Error> {
+ Err(fmt::Error)
+ }
+
+ fn serialize_tuple(self, _len: usize) -> Result<Self::SerializeTuple, fmt::Error> {
+ Err(fmt::Error)
+ }
+
+ fn serialize_tuple_struct(
+ self,
+ _name: &'static str,
+ _len: usize,
+ ) -> Result<Self::SerializeTupleStruct, fmt::Error> {
+ Err(fmt::Error)
+ }
+
+ fn serialize_tuple_variant(
+ self,
+ _name: &'static str,
+ _variant_index: u32,
+ _variant: &'static str,
+ _len: usize,
+ ) -> Result<Self::SerializeTupleVariant, fmt::Error> {
+ Err(fmt::Error)
+ }
+
+ fn serialize_map(self, _len: Option<usize>) -> Result<Self::SerializeMap, fmt::Error> {
+ Err(fmt::Error)
+ }
+
+ fn serialize_struct(
+ self,
+ _name: &'static str,
+ _len: usize,
+ ) -> Result<Self::SerializeStruct, fmt::Error> {
+ Err(fmt::Error)
+ }
+
+ fn serialize_struct_variant(
+ self,
+ _name: &'static str,
+ _variant_index: u32,
+ _variant: &'static str,
+ _len: usize,
+ ) -> Result<Self::SerializeStructVariant, fmt::Error> {
+ Err(fmt::Error)
+ }
+
+ fn collect_str<T: ?Sized>(self, value: &T) -> fmt::Result
+ where
+ T: Display,
+ {
+ Display::fmt(value, self)
+ }
+}