Remove unneeded Option's and unsafe's

This commit is contained in:
Dmitry Samoylov 2020-02-04 17:50:16 +07:00
parent 703a238d02
commit 5a0f0e55a7
2 changed files with 882 additions and 927 deletions

File diff suppressed because it is too large Load Diff

View File

@ -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,10 +72,8 @@ 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() } {
Some(&FieldType::FieldTypeString) => {
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! {
@ -101,17 +99,17 @@ pub fn serialize(
}) })
} }
} }
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! {
@ -153,7 +151,7 @@ pub fn serialize(
}) })
} }
} }
Some(&FieldType::FieldTypeVec { .. }) => { FieldType::FieldTypeVec { .. } => {
let item_ident = Ident::new("yas_item", Span::call_site()); let item_ident = Ident::new("yas_item", Span::call_site());
let inner = enclose_formatted_characters(&item_ident, label_name); let inner = enclose_formatted_characters(&item_ident, label_name);
@ -178,9 +176,8 @@ pub fn serialize(
} }
} }
_ => unimplemented!(), _ => unimplemented!(),
} },
} FieldType::FieldTypeStruct { .. } => {
Some(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,36 +253,32 @@ 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)
| Some(&FieldType::FieldTypeU64)
| Some(&FieldType::FieldTypeF32)
| Some(&FieldType::FieldTypeF64) => {
let item_ident = Ident::new("yas_item", Span::call_site()); let item_ident = Ident::new("yas_item", Span::call_site());
let inner = enclose_formatted_characters_for_value(&item_ident, label_name); let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
@ -307,7 +300,7 @@ pub fn serialize(
}) })
} }
} }
Some(&FieldType::FieldTypeVec { .. }) => { FieldType::FieldTypeVec { .. } => {
let item_ident = Ident::new("yas_item", Span::call_site()); let item_ident = Ident::new("yas_item", Span::call_site());
let inner = enclose_formatted_characters_for_value(&item_ident, label_name); let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
@ -333,7 +326,7 @@ pub fn serialize(
}) })
} }
} }
Some(&FieldType::FieldTypeStruct { .. }) => Some(quote! { FieldType::FieldTypeStruct { .. } => Some(quote! {
if let Some(ref item) = &self.#label { if let Some(ref item) = &self.#label {
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);
@ -341,17 +334,14 @@ pub fn serialize(
} }
}), }),
_ => unimplemented!(), _ => unimplemented!(),
} },
} FieldType::FieldTypeStruct { .. } => Some(quote! {
Some(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() } {
Some(&FieldType::FieldTypeString) => {
let item_ident = Ident::new("yas_item", Span::call_site()); let item_ident = Ident::new("yas_item", Span::call_site());
let inner = enclose_formatted_characters_for_value(&item_ident, label_name); let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
@ -361,17 +351,17 @@ pub fn serialize(
} }
}) })
} }
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 => {
let item_ident = Ident::new("yas_item", Span::call_site()); let item_ident = Ident::new("yas_item", Span::call_site());
let inner = enclose_formatted_characters_for_value(&item_ident, label_name); let inner = enclose_formatted_characters_for_value(&item_ident, label_name);
@ -381,7 +371,7 @@ pub fn serialize(
} }
}) })
} }
Some(&FieldType::FieldTypeOption { .. }) => Some(quote! { FieldType::FieldTypeOption { .. } => Some(quote! {
for item in &self.#label { for item in &self.#label {
if let Some(value) = item { if let Some(value) = item {
writer.set_start_event_name(None); writer.set_start_event_name(None);
@ -390,23 +380,18 @@ pub fn serialize(
} }
} }
}), }),
Some(&FieldType::FieldTypeStruct { .. }) => Some(quote! { FieldType::FieldTypeStruct { .. } => Some(quote! {
for item in &self.#label { for item in &self.#label {
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)?; item.serialize(writer)?;
} }
}), }),
Some(&FieldType::FieldTypeVec { .. }) => { FieldType::FieldTypeVec { .. } => {
unimplemented!(); unimplemented!();
} }
None => { },
unimplemented!(); })
}
}
}
None => None,
}
}) })
.filter_map(|x| x) .filter_map(|x| x)
.collect(); .collect();