Created
March 13, 2018 22:08
-
-
Save mitsuhiko/7f1f5a8e6b646001a42a35cbab01e34b to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#![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