Remove unneeded Option's and unsafe's
This commit is contained in:
parent
703a238d02
commit
5a0f0e55a7
File diff suppressed because it is too large
Load Diff
@ -27,19 +27,19 @@ pub fn serialize(
|
|||||||
|
|
||||||
let label_name = build_label_name(&field, &field_attrs);
|
let label_name = build_label_name(&field, &field_attrs);
|
||||||
|
|
||||||
match get_field_type(field) {
|
get_field_type(field).and_then(|field| match field {
|
||||||
Some(FieldType::FieldTypeString)
|
FieldType::FieldTypeString
|
||||||
| Some(FieldType::FieldTypeBool)
|
| FieldType::FieldTypeBool
|
||||||
| Some(FieldType::FieldTypeI8)
|
| FieldType::FieldTypeI8
|
||||||
| Some(FieldType::FieldTypeU8)
|
| FieldType::FieldTypeU8
|
||||||
| Some(FieldType::FieldTypeI16)
|
| FieldType::FieldTypeI16
|
||||||
| Some(FieldType::FieldTypeU16)
|
| FieldType::FieldTypeU16
|
||||||
| Some(FieldType::FieldTypeI32)
|
| FieldType::FieldTypeI32
|
||||||
| Some(FieldType::FieldTypeU32)
|
| FieldType::FieldTypeU32
|
||||||
| Some(FieldType::FieldTypeI64)
|
| FieldType::FieldTypeI64
|
||||||
| Some(FieldType::FieldTypeU64)
|
| FieldType::FieldTypeU64
|
||||||
| Some(FieldType::FieldTypeF32)
|
| FieldType::FieldTypeF32
|
||||||
| Some(FieldType::FieldTypeF64) => {
|
| FieldType::FieldTypeF64 => {
|
||||||
if let Some(ref d) = field_attrs.default {
|
if let Some(ref d) = field_attrs.default {
|
||||||
let default_function = Ident::new(&d, Span::call_site());
|
let default_function = Ident::new(&d, Span::call_site());
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
@ -72,71 +72,49 @@ pub fn serialize(
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Some(FieldType::FieldTypeOption { data_type }) => {
|
FieldType::FieldTypeOption { data_type } => match *data_type {
|
||||||
let dt = Box::into_raw(data_type);
|
FieldType::FieldTypeString => {
|
||||||
match unsafe { dt.as_ref() } {
|
if let Some(ref d) = field_attrs.default {
|
||||||
Some(&FieldType::FieldTypeString) => {
|
let default_function = Ident::new(&d, Span::call_site());
|
||||||
if let Some(ref d) = field_attrs.default {
|
Some(quote! {
|
||||||
let default_function = Ident::new(&d, Span::call_site());
|
let struct_start_event =
|
||||||
Some(quote! {
|
if self.#label != #default_function() {
|
||||||
let struct_start_event =
|
|
||||||
if self.#label != #default_function() {
|
|
||||||
if let Some(ref value) = self.#label {
|
|
||||||
struct_start_event.attr(#label_name, &value)
|
|
||||||
} else {
|
|
||||||
struct_start_event
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
struct_start_event
|
|
||||||
};
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
Some(quote! {
|
|
||||||
let struct_start_event =
|
|
||||||
if let Some(ref value) = self.#label {
|
if let Some(ref value) = self.#label {
|
||||||
struct_start_event.attr(#label_name, &value)
|
struct_start_event.attr(#label_name, &value)
|
||||||
} else {
|
} else {
|
||||||
struct_start_event
|
struct_start_event
|
||||||
};
|
}
|
||||||
})
|
} else {
|
||||||
}
|
struct_start_event
|
||||||
|
};
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
Some(quote! {
|
||||||
|
let struct_start_event =
|
||||||
|
if let Some(ref value) = self.#label {
|
||||||
|
struct_start_event.attr(#label_name, &value)
|
||||||
|
} else {
|
||||||
|
struct_start_event
|
||||||
|
};
|
||||||
|
})
|
||||||
}
|
}
|
||||||
Some(&FieldType::FieldTypeBool)
|
}
|
||||||
| Some(&FieldType::FieldTypeI8)
|
FieldType::FieldTypeBool
|
||||||
| Some(&FieldType::FieldTypeU8)
|
| FieldType::FieldTypeI8
|
||||||
| Some(&FieldType::FieldTypeI16)
|
| FieldType::FieldTypeU8
|
||||||
| Some(&FieldType::FieldTypeU16)
|
| FieldType::FieldTypeI16
|
||||||
| Some(&FieldType::FieldTypeI32)
|
| FieldType::FieldTypeU16
|
||||||
| Some(&FieldType::FieldTypeU32)
|
| FieldType::FieldTypeI32
|
||||||
| Some(&FieldType::FieldTypeI64)
|
| FieldType::FieldTypeU32
|
||||||
| Some(&FieldType::FieldTypeU64)
|
| FieldType::FieldTypeI64
|
||||||
| Some(&FieldType::FieldTypeF32)
|
| FieldType::FieldTypeU64
|
||||||
| Some(&FieldType::FieldTypeF64) => {
|
| FieldType::FieldTypeF32
|
||||||
if let Some(ref d) = field_attrs.default {
|
| FieldType::FieldTypeF64 => {
|
||||||
let default_function = Ident::new(&d, Span::call_site());
|
if let Some(ref d) = field_attrs.default {
|
||||||
Some(quote! {
|
let default_function = Ident::new(&d, Span::call_site());
|
||||||
let struct_start_event =
|
Some(quote! {
|
||||||
if self.#label != #default_function() {
|
let struct_start_event =
|
||||||
if let Some(ref value) = self.#label {
|
if self.#label != #default_function() {
|
||||||
struct_start_event.attr(#label_name, &*{
|
|
||||||
use std::mem;
|
|
||||||
unsafe {
|
|
||||||
let content = format!("{}", value);
|
|
||||||
let ret : &'static str = mem::transmute(&content as &str);
|
|
||||||
mem::forget(content);
|
|
||||||
ret
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
struct_start_event
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
struct_start_event
|
|
||||||
};
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
Some(quote! {
|
|
||||||
let struct_start_event =
|
|
||||||
if let Some(ref value) = self.#label {
|
if let Some(ref value) = self.#label {
|
||||||
struct_start_event.attr(#label_name, &*{
|
struct_start_event.attr(#label_name, &*{
|
||||||
use std::mem;
|
use std::mem;
|
||||||
@ -149,38 +127,57 @@ pub fn serialize(
|
|||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
struct_start_event
|
struct_start_event
|
||||||
};
|
}
|
||||||
})
|
} else {
|
||||||
}
|
struct_start_event
|
||||||
}
|
};
|
||||||
Some(&FieldType::FieldTypeVec { .. }) => {
|
})
|
||||||
let item_ident = Ident::new("yas_item", Span::call_site());
|
} else {
|
||||||
let inner = enclose_formatted_characters(&item_ident, label_name);
|
Some(quote! {
|
||||||
|
let struct_start_event =
|
||||||
if let Some(ref d) = field_attrs.default {
|
if let Some(ref value) = self.#label {
|
||||||
let default_function = Ident::new(&d, Span::call_site());
|
struct_start_event.attr(#label_name, &*{
|
||||||
|
use std::mem;
|
||||||
Some(quote! {
|
unsafe {
|
||||||
if self.#label != #default_function() {
|
let content = format!("{}", value);
|
||||||
if let Some(ref yas_list) = self.#label {
|
let ret : &'static str = mem::transmute(&content as &str);
|
||||||
for yas_item in yas_list.iter() {
|
mem::forget(content);
|
||||||
#inner
|
ret
|
||||||
}
|
}
|
||||||
|
})
|
||||||
|
} else {
|
||||||
|
struct_start_event
|
||||||
|
};
|
||||||
|
})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
FieldType::FieldTypeVec { .. } => {
|
||||||
|
let item_ident = Ident::new("yas_item", Span::call_site());
|
||||||
|
let inner = enclose_formatted_characters(&item_ident, label_name);
|
||||||
|
|
||||||
|
if let Some(ref d) = field_attrs.default {
|
||||||
|
let default_function = Ident::new(&d, Span::call_site());
|
||||||
|
|
||||||
|
Some(quote! {
|
||||||
|
if self.#label != #default_function() {
|
||||||
|
if let Some(ref yas_list) = self.#label {
|
||||||
|
for yas_item in yas_list.iter() {
|
||||||
|
#inner
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
} else {
|
})
|
||||||
Some(quote! {
|
} else {
|
||||||
for yas_item in &self.#label {
|
Some(quote! {
|
||||||
#inner
|
for yas_item in &self.#label {
|
||||||
}
|
#inner
|
||||||
})
|
}
|
||||||
}
|
})
|
||||||
}
|
}
|
||||||
_ => unimplemented!(),
|
|
||||||
}
|
}
|
||||||
}
|
_ => unimplemented!(),
|
||||||
Some(FieldType::FieldTypeStruct { .. }) => {
|
},
|
||||||
|
FieldType::FieldTypeStruct { .. } => {
|
||||||
if let Some(ref d) = field_attrs.default {
|
if let Some(ref d) = field_attrs.default {
|
||||||
let default_function = Ident::new(&d, Span::call_site());
|
let default_function = Ident::new(&d, Span::call_site());
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
@ -222,7 +219,7 @@ pub fn serialize(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
_ => None,
|
_ => None,
|
||||||
}
|
})
|
||||||
})
|
})
|
||||||
.filter_map(|x| x)
|
.filter_map(|x| x)
|
||||||
.collect();
|
.collect();
|
||||||
@ -256,157 +253,145 @@ pub fn serialize(
|
|||||||
|
|
||||||
let label_name = build_label_name(&field, &field_attrs);
|
let label_name = build_label_name(&field, &field_attrs);
|
||||||
|
|
||||||
match get_field_type(field) {
|
get_field_type(field).and_then(|field| match field {
|
||||||
Some(FieldType::FieldTypeString)
|
FieldType::FieldTypeString
|
||||||
| Some(FieldType::FieldTypeBool)
|
| FieldType::FieldTypeBool
|
||||||
| Some(FieldType::FieldTypeI8)
|
| FieldType::FieldTypeI8
|
||||||
| Some(FieldType::FieldTypeU8)
|
| FieldType::FieldTypeU8
|
||||||
| Some(FieldType::FieldTypeI16)
|
| FieldType::FieldTypeI16
|
||||||
| Some(FieldType::FieldTypeU16)
|
| FieldType::FieldTypeU16
|
||||||
| Some(FieldType::FieldTypeI32)
|
| FieldType::FieldTypeI32
|
||||||
| Some(FieldType::FieldTypeU32)
|
| FieldType::FieldTypeU32
|
||||||
| Some(FieldType::FieldTypeI64)
|
| FieldType::FieldTypeI64
|
||||||
| Some(FieldType::FieldTypeU64)
|
| FieldType::FieldTypeU64
|
||||||
| Some(FieldType::FieldTypeF32)
|
| FieldType::FieldTypeF32
|
||||||
| Some(FieldType::FieldTypeF64) => {
|
| FieldType::FieldTypeF64 => serialize_element(label, label_name, &field_attrs.default),
|
||||||
serialize_element(label, label_name, &field_attrs.default)
|
FieldType::FieldTypeOption { data_type } => match *data_type {
|
||||||
}
|
FieldType::FieldTypeString
|
||||||
Some(FieldType::FieldTypeOption { data_type }) => {
|
| FieldType::FieldTypeBool
|
||||||
let dt = Box::into_raw(data_type);
|
| FieldType::FieldTypeI8
|
||||||
match unsafe { dt.as_ref() } {
|
| FieldType::FieldTypeU8
|
||||||
Some(&FieldType::FieldTypeString)
|
| FieldType::FieldTypeI16
|
||||||
| Some(&FieldType::FieldTypeBool)
|
| FieldType::FieldTypeU16
|
||||||
| Some(&FieldType::FieldTypeI8)
|
| FieldType::FieldTypeI32
|
||||||
| Some(&FieldType::FieldTypeU8)
|
| FieldType::FieldTypeU32
|
||||||
| Some(&FieldType::FieldTypeI16)
|
| FieldType::FieldTypeI64
|
||||||
| Some(&FieldType::FieldTypeU16)
|
| FieldType::FieldTypeU64
|
||||||
| Some(&FieldType::FieldTypeI32)
|
| FieldType::FieldTypeF32
|
||||||
| Some(&FieldType::FieldTypeU32)
|
| FieldType::FieldTypeF64 => {
|
||||||
| Some(&FieldType::FieldTypeI64)
|
let item_ident = Ident::new("yas_item", Span::call_site());
|
||||||
| Some(&FieldType::FieldTypeU64)
|
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
||||||
| Some(&FieldType::FieldTypeF32)
|
|
||||||
| Some(&FieldType::FieldTypeF64) => {
|
|
||||||
let item_ident = Ident::new("yas_item", Span::call_site());
|
|
||||||
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
|
||||||
|
|
||||||
if let Some(ref d) = field_attrs.default {
|
if let Some(ref d) = field_attrs.default {
|
||||||
let default_function = Ident::new(&d, Span::call_site());
|
let default_function = Ident::new(&d, Span::call_site());
|
||||||
|
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
if self.#label != #default_function() {
|
if self.#label != #default_function() {
|
||||||
if let Some(ref yas_item) = self.#label {
|
|
||||||
#inner
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
Some(quote! {
|
|
||||||
if let Some(ref yas_item) = self.#label {
|
if let Some(ref yas_item) = self.#label {
|
||||||
#inner
|
#inner
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
}
|
})
|
||||||
|
} else {
|
||||||
|
Some(quote! {
|
||||||
|
if let Some(ref yas_item) = self.#label {
|
||||||
|
#inner
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
Some(&FieldType::FieldTypeVec { .. }) => {
|
}
|
||||||
let item_ident = Ident::new("yas_item", Span::call_site());
|
FieldType::FieldTypeVec { .. } => {
|
||||||
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
let item_ident = Ident::new("yas_item", Span::call_site());
|
||||||
|
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
||||||
|
|
||||||
if let Some(ref d) = field_attrs.default {
|
if let Some(ref d) = field_attrs.default {
|
||||||
let default_function = Ident::new(&d, Span::call_site());
|
let default_function = Ident::new(&d, Span::call_site());
|
||||||
|
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
if self.#label != #default_function() {
|
if self.#label != #default_function() {
|
||||||
if let Some(ref yas_items) = &self.#label {
|
|
||||||
for yas_item in yas_items.iter() {
|
|
||||||
#inner
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
Some(quote! {
|
|
||||||
if let Some(ref yas_items) = &self.#label {
|
if let Some(ref yas_items) = &self.#label {
|
||||||
for yas_item in yas_items.iter() {
|
for yas_item in yas_items.iter() {
|
||||||
#inner
|
#inner
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
}
|
||||||
}
|
})
|
||||||
|
} else {
|
||||||
|
Some(quote! {
|
||||||
|
if let Some(ref yas_items) = &self.#label {
|
||||||
|
for yas_item in yas_items.iter() {
|
||||||
|
#inner
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
Some(&FieldType::FieldTypeStruct { .. }) => Some(quote! {
|
|
||||||
if let Some(ref item) = &self.#label {
|
|
||||||
writer.set_start_event_name(Some(#label_name.to_string()));
|
|
||||||
writer.set_skip_start_end(false);
|
|
||||||
item.serialize(writer)?;
|
|
||||||
}
|
|
||||||
}),
|
|
||||||
_ => unimplemented!(),
|
|
||||||
}
|
}
|
||||||
}
|
FieldType::FieldTypeStruct { .. } => Some(quote! {
|
||||||
Some(FieldType::FieldTypeStruct { .. }) => Some(quote! {
|
if let Some(ref item) = &self.#label {
|
||||||
|
writer.set_start_event_name(Some(#label_name.to_string()));
|
||||||
|
writer.set_skip_start_end(false);
|
||||||
|
item.serialize(writer)?;
|
||||||
|
}
|
||||||
|
}),
|
||||||
|
_ => unimplemented!(),
|
||||||
|
},
|
||||||
|
FieldType::FieldTypeStruct { .. } => Some(quote! {
|
||||||
writer.set_start_event_name(Some(#label_name.to_string()));
|
writer.set_start_event_name(Some(#label_name.to_string()));
|
||||||
writer.set_skip_start_end(false);
|
writer.set_skip_start_end(false);
|
||||||
self.#label.serialize(writer)?;
|
self.#label.serialize(writer)?;
|
||||||
}),
|
}),
|
||||||
Some(FieldType::FieldTypeVec { data_type }) => {
|
FieldType::FieldTypeVec { data_type } => match *data_type {
|
||||||
let dt = Box::into_raw(data_type);
|
FieldType::FieldTypeString => {
|
||||||
match unsafe { dt.as_ref() } {
|
let item_ident = Ident::new("yas_item", Span::call_site());
|
||||||
Some(&FieldType::FieldTypeString) => {
|
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
||||||
let item_ident = Ident::new("yas_item", Span::call_site());
|
|
||||||
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
|
||||||
|
|
||||||
Some(quote! {
|
Some(quote! {
|
||||||
for yas_item in &self.#label {
|
for yas_item in &self.#label {
|
||||||
#inner
|
#inner
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
Some(&FieldType::FieldTypeBool)
|
|
||||||
| Some(&FieldType::FieldTypeI8)
|
|
||||||
| Some(&FieldType::FieldTypeU8)
|
|
||||||
| Some(&FieldType::FieldTypeI16)
|
|
||||||
| Some(&FieldType::FieldTypeU16)
|
|
||||||
| Some(&FieldType::FieldTypeI32)
|
|
||||||
| Some(&FieldType::FieldTypeU32)
|
|
||||||
| Some(&FieldType::FieldTypeI64)
|
|
||||||
| Some(&FieldType::FieldTypeU64)
|
|
||||||
| Some(&FieldType::FieldTypeF32)
|
|
||||||
| Some(&FieldType::FieldTypeF64) => {
|
|
||||||
let item_ident = Ident::new("yas_item", Span::call_site());
|
|
||||||
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
|
||||||
|
|
||||||
Some(quote! {
|
|
||||||
for yas_item in &self.#label {
|
|
||||||
#inner
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
Some(&FieldType::FieldTypeOption { .. }) => Some(quote! {
|
|
||||||
for item in &self.#label {
|
|
||||||
if let Some(value) = item {
|
|
||||||
writer.set_start_event_name(None);
|
|
||||||
writer.set_skip_start_end(false);
|
|
||||||
value.serialize(writer)?;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}),
|
})
|
||||||
Some(&FieldType::FieldTypeStruct { .. }) => Some(quote! {
|
}
|
||||||
for item in &self.#label {
|
FieldType::FieldTypeBool
|
||||||
|
| FieldType::FieldTypeI8
|
||||||
|
| FieldType::FieldTypeU8
|
||||||
|
| FieldType::FieldTypeI16
|
||||||
|
| FieldType::FieldTypeU16
|
||||||
|
| FieldType::FieldTypeI32
|
||||||
|
| FieldType::FieldTypeU32
|
||||||
|
| FieldType::FieldTypeI64
|
||||||
|
| FieldType::FieldTypeU64
|
||||||
|
| FieldType::FieldTypeF32
|
||||||
|
| FieldType::FieldTypeF64 => {
|
||||||
|
let item_ident = Ident::new("yas_item", Span::call_site());
|
||||||
|
let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
|
||||||
|
|
||||||
|
Some(quote! {
|
||||||
|
for yas_item in &self.#label {
|
||||||
|
#inner
|
||||||
|
}
|
||||||
|
})
|
||||||
|
}
|
||||||
|
FieldType::FieldTypeOption { .. } => Some(quote! {
|
||||||
|
for item in &self.#label {
|
||||||
|
if let Some(value) = item {
|
||||||
writer.set_start_event_name(None);
|
writer.set_start_event_name(None);
|
||||||
writer.set_skip_start_end(false);
|
writer.set_skip_start_end(false);
|
||||||
item.serialize(writer)?;
|
value.serialize(writer)?;
|
||||||
}
|
}
|
||||||
}),
|
|
||||||
Some(&FieldType::FieldTypeVec { .. }) => {
|
|
||||||
unimplemented!();
|
|
||||||
}
|
}
|
||||||
None => {
|
}),
|
||||||
unimplemented!();
|
FieldType::FieldTypeStruct { .. } => Some(quote! {
|
||||||
|
for item in &self.#label {
|
||||||
|
writer.set_start_event_name(None);
|
||||||
|
writer.set_skip_start_end(false);
|
||||||
|
item.serialize(writer)?;
|
||||||
}
|
}
|
||||||
|
}),
|
||||||
|
FieldType::FieldTypeVec { .. } => {
|
||||||
|
unimplemented!();
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
None => None,
|
})
|
||||||
}
|
|
||||||
})
|
})
|
||||||
.filter_map(|x| x)
|
.filter_map(|x| x)
|
||||||
.collect();
|
.collect();
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user