Skip to content

Instantly share code, notes, and snippets.

@mitsuhiko
Created March 13, 2018 22:08
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mitsuhiko/7f1f5a8e6b646001a42a35cbab01e34b to your computer and use it in GitHub Desktop.
Save mitsuhiko/7f1f5a8e6b646001a42a35cbab01e34b to your computer and use it in GitHub Desktop.
#![feature(prelude_import)]
#![no_std]
#[prelude_import]
use std::prelude::v1::*;
#[macro_use]
extern crate serde_derive;
extern crate serde_json;
#[macro_use]
extern crate std as std;
use std::collections::HashMap;
//#[serde(collect_unknown_fields_into="foo", deny_unknown_fields)]
//#[serde(deny_unknown_fields)]
#[serde(collect_unknown_fields_into = "other")]
pub struct Breadcrumb {
#[serde(rename = "type")]
ty: String,
timestamp: f64,
other: HashMap<String, String>,
}
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)]
const _IMPL_DESERIALIZE_FOR_Breadcrumb: () = {
extern crate serde as _serde;
#[automatically_derived]
impl<'de> _serde::Deserialize<'de> for Breadcrumb {
fn deserialize<__D>(__deserializer: __D) -> _serde::export::Result<Self, __D::Error>
where
__D: _serde::Deserializer<'de>,
{
#[allow(non_camel_case_types)]
enum __Field {
__field0,
__field1,
__other(String),
}
struct __FieldVisitor;
impl<'de> _serde::de::Visitor<'de> for __FieldVisitor {
type Value = __Field;
fn expecting(
&self,
formatter: &mut _serde::export::Formatter,
) -> _serde::export::fmt::Result {
_serde::export::Formatter::write_str(formatter, "field identifier")
}
fn visit_u64<__E>(self, __value: u64) -> _serde::export::Result<Self::Value, __E>
where
__E: _serde::de::Error,
{
match __value {
0u64 => _serde::export::Ok(__Field::__field0),
1u64 => _serde::export::Ok(__Field::__field1),
_ => _serde::export::Err(_serde::de::Error::invalid_value(
_serde::de::Unexpected::Unsigned(__value),
&"field index 0 <= i < 2",
)),
}
}
fn visit_str<__E>(self, __value: &str) -> _serde::export::Result<Self::Value, __E>
where
__E: _serde::de::Error,
{
match __value {
"type" => _serde::export::Ok(__Field::__field0),
"timestamp" => _serde::export::Ok(__Field::__field1),
_ => _serde::export::Ok(__Field::__other(__value.to_string())),
}
}
fn visit_bytes<__E>(
self,
__value: &[u8],
) -> _serde::export::Result<Self::Value, __E>
where
__E: _serde::de::Error,
{
match __value {
b"type" => _serde::export::Ok(__Field::__field0),
b"timestamp" => _serde::export::Ok(__Field::__field1),
_ => {
let __value = &_serde::export::from_utf8_lossy(__value);
_serde::export::Ok(__Field::__other(__value.to_string()))
}
}
}
}
impl<'de> _serde::Deserialize<'de> for __Field {
#[inline]
fn deserialize<__D>(__deserializer: __D) -> _serde::export::Result<Self, __D::Error>
where
__D: _serde::Deserializer<'de>,
{
_serde::Deserializer::deserialize_identifier(__deserializer, __FieldVisitor)
}
}
struct __Visitor<'de> {
marker: _serde::export::PhantomData<Breadcrumb>,
lifetime: _serde::export::PhantomData<&'de ()>,
}
impl<'de> _serde::de::Visitor<'de> for __Visitor<'de> {
type Value = Breadcrumb;
fn expecting(
&self,
formatter: &mut _serde::export::Formatter,
) -> _serde::export::fmt::Result {
_serde::export::Formatter::write_str(formatter, "struct Breadcrumb")
}
#[inline]
fn visit_seq<__A>(
self,
mut __seq: __A,
) -> _serde::export::Result<Self::Value, __A::Error>
where
__A: _serde::de::SeqAccess<'de>,
{
let __field0 =
match match _serde::de::SeqAccess::next_element::<String>(&mut __seq) {
::result::Result::Ok(val) => val,
::result::Result::Err(err) => {
return ::result::Result::Err(::convert::From::from(err))
}
} {
_serde::export::Some(__value) => __value,
_serde::export::None => {
return _serde::export::Err(_serde::de::Error::invalid_length(
0usize,
&"tuple of 2 elements",
));
}
};
let __field1 =
match match _serde::de::SeqAccess::next_element::<f64>(&mut __seq) {
::result::Result::Ok(val) => val,
::result::Result::Err(err) => {
return ::result::Result::Err(::convert::From::from(err))
}
} {
_serde::export::Some(__value) => __value,
_serde::export::None => {
return _serde::export::Err(_serde::de::Error::invalid_length(
1usize,
&"tuple of 2 elements",
));
}
};
let __field2 = match _serde::private::de::missing_field("other") {
::result::Result::Ok(val) => val,
::result::Result::Err(err) => {
return ::result::Result::Err(::convert::From::from(err))
}
};
_serde::export::Ok(Breadcrumb {
ty: __field0,
timestamp: __field1,
other: __field2,
})
}
#[inline]
fn visit_map<__A>(
self,
mut __map: __A,
) -> _serde::export::Result<Self::Value, __A::Error>
where
__A: _serde::de::MapAccess<'de>,
{
let mut __field0: _serde::export::Option<String> = _serde::export::None;
let mut __field1: _serde::export::Option<f64> = _serde::export::None;
let mut __collect: HashMap<String, String> = Default::default();
while let _serde::export::Some(__key) =
match _serde::de::MapAccess::next_key::<__Field>(&mut __map) {
::result::Result::Ok(val) => val,
::result::Result::Err(err) => {
return ::result::Result::Err(::convert::From::from(err))
}
} {
match __key {
__Field::__field0 => {
if _serde::export::Option::is_some(&__field0) {
return _serde::export::Err(
<__A::Error as _serde::de::Error>::duplicate_field("type"),
);
}
__field0 = _serde::export::Some(
match _serde::de::MapAccess::next_value::<String>(&mut __map) {
::result::Result::Ok(val) => val,
::result::Result::Err(err) => {
return ::result::Result::Err(::convert::From::from(err))
}
},
);
}
__Field::__field1 => {
if _serde::export::Option::is_some(&__field1) {
return _serde::export::Err(
<__A::Error as _serde::de::Error>::duplicate_field(
"timestamp",
),
);
}
__field1 = _serde::export::Some(
match _serde::de::MapAccess::next_value::<f64>(&mut __map) {
::result::Result::Ok(val) => val,
::result::Result::Err(err) => {
return ::result::Result::Err(::convert::From::from(err))
}
},
);
}
__Field::__other(__name) => {
__collect.extend(_serde::export::once((
__name,
match _serde::de::MapAccess::next_value(&mut __map) {
::result::Result::Ok(val) => val,
::result::Result::Err(err) => {
return ::result::Result::Err(::convert::From::from(err))
}
},
)));
}
}
}
let __field0 = match __field0 {
_serde::export::Some(__field0) => __field0,
_serde::export::None => match _serde::private::de::missing_field("type") {
::result::Result::Ok(val) => val,
::result::Result::Err(err) => {
return ::result::Result::Err(::convert::From::from(err))
}
},
};
let __field1 = match __field1 {
_serde::export::Some(__field1) => __field1,
_serde::export::None => {
match _serde::private::de::missing_field("timestamp") {
::result::Result::Ok(val) => val,
::result::Result::Err(err) => {
return ::result::Result::Err(::convert::From::from(err))
}
}
}
};
_serde::export::Ok(Breadcrumb {
ty: __field0,
timestamp: __field1,
other: __collect,
})
}
}
const FIELDS: &'static [&'static str] = &["type", "timestamp"];
_serde::Deserializer::deserialize_struct(
__deserializer,
"Breadcrumb",
FIELDS,
__Visitor {
marker: _serde::export::PhantomData::<Breadcrumb>,
lifetime: _serde::export::PhantomData,
},
)
}
}
};
#[automatically_derived]
#[allow(unused_qualifications)]
impl ::std::fmt::Debug for Breadcrumb {
fn fmt(&self, __arg_0: &mut ::std::fmt::Formatter) -> ::std::fmt::Result {
match *self {
Breadcrumb {
ty: ref __self_0_0,
timestamp: ref __self_0_1,
other: ref __self_0_2,
} => {
let mut builder = __arg_0.debug_struct("Breadcrumb");
let _ = builder.field("ty", &&(*__self_0_0));
let _ = builder.field("timestamp", &&(*__self_0_1));
let _ = builder.field("other", &&(*__self_0_2));
builder.finish()
}
}
}
}
fn main() {
let x: Breadcrumb = serde_json::from_str(
r#"
{
"type": "foobar",
"timestamp": 123123.1231,
"foo": "bar",
"blub": "blah"
}
"#,
).unwrap();
::io::_print(::std::fmt::Arguments::new_v1_formatted(
&["", "\n"],
&match (&&x,) {
(__arg0,) => [::std::fmt::ArgumentV1::new(__arg0, ::std::fmt::Debug::fmt)],
},
&[
::std::fmt::rt::v1::Argument {
position: ::std::fmt::rt::v1::Position::At(0usize),
format: ::std::fmt::rt::v1::FormatSpec {
fill: ' ',
align: ::std::fmt::rt::v1::Alignment::Unknown,
flags: 4u32,
precision: ::std::fmt::rt::v1::Count::Implied,
width: ::std::fmt::rt::v1::Count::Implied,
},
},
],
));
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment