Last active
January 18, 2020 14:57
-
-
Save koba-e964/3ac3a066c423f624f83ecd8dfa698a66 to your computer and use it in GitHub Desktop.
struct A<T>{a: i32, b: i64, c: T}
This file contains hidden or 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)] | |
#[prelude_import] | |
use std::prelude::v1::*; | |
#[macro_use] | |
extern crate std; | |
use serde::{Deserialize, Serialize}; | |
struct A<T> { | |
a: i32, | |
b: i64, | |
c: T, | |
} | |
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] | |
const _IMPL_SERIALIZE_FOR_A: () = { | |
#[allow(unknown_lints)] | |
#[allow(rust_2018_idioms)] | |
extern crate serde as _serde; | |
#[allow(unused_macros)] | |
macro_rules! try { | |
($ __expr : expr) => { | |
match $__expr { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
} | |
}; | |
} | |
#[automatically_derived] | |
impl<T> _serde::Serialize for A<T> | |
where | |
T: _serde::Serialize, | |
{ | |
fn serialize<__S>(&self, __serializer: __S) -> _serde::export::Result<__S::Ok, __S::Error> | |
where | |
__S: _serde::Serializer, | |
{ | |
let mut __serde_state = match _serde::Serializer::serialize_struct( | |
__serializer, | |
"A", | |
false as usize + 1 + 1 + 1, | |
) { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
}; | |
match _serde::ser::SerializeStruct::serialize_field(&mut __serde_state, "a", &self.a) { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
}; | |
match _serde::ser::SerializeStruct::serialize_field(&mut __serde_state, "b", &self.b) { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
}; | |
match _serde::ser::SerializeStruct::serialize_field(&mut __serde_state, "c", &self.c) { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
}; | |
_serde::ser::SerializeStruct::end(__serde_state) | |
} | |
} | |
}; | |
#[allow(non_upper_case_globals, unused_attributes, unused_qualifications)] | |
const _IMPL_DESERIALIZE_FOR_A: () = { | |
#[allow(unknown_lints)] | |
#[allow(rust_2018_idioms)] | |
extern crate serde as _serde; | |
#[allow(unused_macros)] | |
macro_rules! try { | |
($ __expr : expr) => { | |
match $__expr { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
} | |
}; | |
} | |
#[automatically_derived] | |
impl<'de, T> _serde::Deserialize<'de> for A<T> | |
where | |
T: _serde::Deserialize<'de>, | |
{ | |
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, | |
__field2, | |
__ignore, | |
} | |
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), | |
2u64 => _serde::export::Ok(__Field::__field2), | |
_ => _serde::export::Err(_serde::de::Error::invalid_value( | |
_serde::de::Unexpected::Unsigned(__value), | |
&"field index 0 <= i < 3", | |
)), | |
} | |
} | |
fn visit_str<__E>(self, __value: &str) -> _serde::export::Result<Self::Value, __E> | |
where | |
__E: _serde::de::Error, | |
{ | |
match __value { | |
"a" => _serde::export::Ok(__Field::__field0), | |
"b" => _serde::export::Ok(__Field::__field1), | |
"c" => _serde::export::Ok(__Field::__field2), | |
_ => _serde::export::Ok(__Field::__ignore), | |
} | |
} | |
fn visit_bytes<__E>( | |
self, | |
__value: &[u8], | |
) -> _serde::export::Result<Self::Value, __E> | |
where | |
__E: _serde::de::Error, | |
{ | |
match __value { | |
b"a" => _serde::export::Ok(__Field::__field0), | |
b"b" => _serde::export::Ok(__Field::__field1), | |
b"c" => _serde::export::Ok(__Field::__field2), | |
_ => _serde::export::Ok(__Field::__ignore), | |
} | |
} | |
} | |
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, T> | |
where | |
T: _serde::Deserialize<'de>, | |
{ | |
marker: _serde::export::PhantomData<A<T>>, | |
lifetime: _serde::export::PhantomData<&'de ()>, | |
} | |
impl<'de, T> _serde::de::Visitor<'de> for __Visitor<'de, T> | |
where | |
T: _serde::Deserialize<'de>, | |
{ | |
type Value = A<T>; | |
fn expecting( | |
&self, | |
__formatter: &mut _serde::export::Formatter, | |
) -> _serde::export::fmt::Result { | |
_serde::export::Formatter::write_str(__formatter, "struct A") | |
} | |
#[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::<i32>(&mut __seq) { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
} { | |
_serde::export::Some(__value) => __value, | |
_serde::export::None => { | |
return _serde::export::Err(_serde::de::Error::invalid_length( | |
0usize, | |
&"struct A with 3 elements", | |
)); | |
} | |
}; | |
let __field1 = | |
match match _serde::de::SeqAccess::next_element::<i64>(&mut __seq) { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
} { | |
_serde::export::Some(__value) => __value, | |
_serde::export::None => { | |
return _serde::export::Err(_serde::de::Error::invalid_length( | |
1usize, | |
&"struct A with 3 elements", | |
)); | |
} | |
}; | |
let __field2 = match match _serde::de::SeqAccess::next_element::<T>(&mut __seq) | |
{ | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
} { | |
_serde::export::Some(__value) => __value, | |
_serde::export::None => { | |
return _serde::export::Err(_serde::de::Error::invalid_length( | |
2usize, | |
&"struct A with 3 elements", | |
)); | |
} | |
}; | |
_serde::export::Ok(A { | |
a: __field0, | |
b: __field1, | |
c: __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<i32> = _serde::export::None; | |
let mut __field1: _serde::export::Option<i64> = _serde::export::None; | |
let mut __field2: _serde::export::Option<T> = _serde::export::None; | |
while let _serde::export::Some(__key) = | |
match _serde::de::MapAccess::next_key::<__Field>(&mut __map) { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
} | |
{ | |
match __key { | |
__Field::__field0 => { | |
if _serde::export::Option::is_some(&__field0) { | |
return _serde::export::Err( | |
<__A::Error as _serde::de::Error>::duplicate_field("a"), | |
); | |
} | |
__field0 = _serde::export::Some( | |
match _serde::de::MapAccess::next_value::<i32>(&mut __map) { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
}, | |
); | |
} | |
__Field::__field1 => { | |
if _serde::export::Option::is_some(&__field1) { | |
return _serde::export::Err( | |
<__A::Error as _serde::de::Error>::duplicate_field("b"), | |
); | |
} | |
__field1 = _serde::export::Some( | |
match _serde::de::MapAccess::next_value::<i64>(&mut __map) { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
}, | |
); | |
} | |
__Field::__field2 => { | |
if _serde::export::Option::is_some(&__field2) { | |
return _serde::export::Err( | |
<__A::Error as _serde::de::Error>::duplicate_field("c"), | |
); | |
} | |
__field2 = _serde::export::Some( | |
match _serde::de::MapAccess::next_value::<T>(&mut __map) { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
}, | |
); | |
} | |
_ => { | |
let _ = match _serde::de::MapAccess::next_value::< | |
_serde::de::IgnoredAny, | |
>(&mut __map) | |
{ | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
}; | |
} | |
} | |
} | |
let __field0 = match __field0 { | |
_serde::export::Some(__field0) => __field0, | |
_serde::export::None => match _serde::private::de::missing_field("a") { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
}, | |
}; | |
let __field1 = match __field1 { | |
_serde::export::Some(__field1) => __field1, | |
_serde::export::None => match _serde::private::de::missing_field("b") { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
}, | |
}; | |
let __field2 = match __field2 { | |
_serde::export::Some(__field2) => __field2, | |
_serde::export::None => match _serde::private::de::missing_field("c") { | |
_serde::export::Ok(__val) => __val, | |
_serde::export::Err(__err) => { | |
return _serde::export::Err(__err); | |
} | |
}, | |
}; | |
_serde::export::Ok(A { | |
a: __field0, | |
b: __field1, | |
c: __field2, | |
}) | |
} | |
} | |
const FIELDS: &'static [&'static str] = &["a", "b", "c"]; | |
_serde::Deserializer::deserialize_struct( | |
__deserializer, | |
"A", | |
FIELDS, | |
__Visitor { | |
marker: _serde::export::PhantomData::<A<T>>, | |
lifetime: _serde::export::PhantomData, | |
}, | |
) | |
} | |
} | |
}; | |
fn main() {} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment