mirror of
https://github.com/pezkuwichain/serde.git
synced 2026-04-23 00:08:01 +00:00
chore(codegen): Clean up error handling
This commit is contained in:
+15
-14
@@ -11,7 +11,8 @@ use syntax::ext::base::{Annotatable, ExtCtxt};
|
||||
use syntax::ext::build::AstBuilder;
|
||||
use syntax::ptr::P;
|
||||
|
||||
use field;
|
||||
use attr;
|
||||
use error::Error;
|
||||
|
||||
pub fn expand_derive_serialize(
|
||||
cx: &mut ExtCtxt,
|
||||
@@ -55,7 +56,7 @@ pub fn expand_derive_serialize(
|
||||
|
||||
let body = match serialize_body(cx, &builder, &item, &impl_generics, ty.clone()) {
|
||||
Ok(body) => body,
|
||||
Err(()) => {
|
||||
Err(Error) => {
|
||||
// An error occured, but it should have been reported already.
|
||||
return;
|
||||
}
|
||||
@@ -82,10 +83,10 @@ fn serialize_body(
|
||||
item: &Item,
|
||||
impl_generics: &ast::Generics,
|
||||
ty: P<ast::Ty>,
|
||||
) -> Result<P<ast::Expr>, ()> {
|
||||
) -> Result<P<ast::Expr>, Error> {
|
||||
// Note: While we don't have any container attributes, we still want to try to
|
||||
// parse them so we can report a proper error if we get passed an unknown attribute.
|
||||
let _ = try!(field::container_attrs(cx, item));
|
||||
let _ = try!(attr::get_container_attrs(cx, item));
|
||||
|
||||
match item.node {
|
||||
ast::ItemStruct(ref variant_data, _) => {
|
||||
@@ -124,7 +125,7 @@ fn serialize_item_struct(
|
||||
ty: P<ast::Ty>,
|
||||
span: Span,
|
||||
variant_data: &ast::VariantData,
|
||||
) -> Result<P<ast::Expr>, ()> {
|
||||
) -> Result<P<ast::Expr>, Error> {
|
||||
match *variant_data {
|
||||
ast::VariantData::Unit(_) => {
|
||||
serialize_unit_struct(
|
||||
@@ -175,7 +176,7 @@ fn serialize_unit_struct(
|
||||
cx: &ExtCtxt,
|
||||
builder: &aster::AstBuilder,
|
||||
type_ident: Ident
|
||||
) -> Result<P<ast::Expr>, ()> {
|
||||
) -> Result<P<ast::Expr>, Error> {
|
||||
let type_name = builder.expr().str(type_ident);
|
||||
|
||||
Ok(quote_expr!(cx,
|
||||
@@ -187,7 +188,7 @@ fn serialize_newtype_struct(
|
||||
cx: &ExtCtxt,
|
||||
builder: &aster::AstBuilder,
|
||||
type_ident: Ident
|
||||
) -> Result<P<ast::Expr>, ()> {
|
||||
) -> Result<P<ast::Expr>, Error> {
|
||||
let type_name = builder.expr().str(type_ident);
|
||||
|
||||
Ok(quote_expr!(cx,
|
||||
@@ -202,7 +203,7 @@ fn serialize_tuple_struct(
|
||||
impl_generics: &ast::Generics,
|
||||
ty: P<ast::Ty>,
|
||||
fields: usize,
|
||||
) -> Result<P<ast::Expr>, ()> {
|
||||
) -> Result<P<ast::Expr>, Error> {
|
||||
let (visitor_struct, visitor_impl) = serialize_tuple_struct_visitor(
|
||||
cx,
|
||||
builder,
|
||||
@@ -235,7 +236,7 @@ fn serialize_struct(
|
||||
impl_generics: &ast::Generics,
|
||||
ty: P<ast::Ty>,
|
||||
fields: &[ast::StructField],
|
||||
) -> Result<P<ast::Expr>, ()> {
|
||||
) -> Result<P<ast::Expr>, Error> {
|
||||
let value_exprs = fields.iter().map(|field| {
|
||||
let name = field.node.ident().expect("struct has unnamed field");
|
||||
quote_expr!(cx, &self.value.$name)
|
||||
@@ -274,7 +275,7 @@ fn serialize_item_enum(
|
||||
impl_generics: &ast::Generics,
|
||||
ty: P<ast::Ty>,
|
||||
enum_def: &ast::EnumDef,
|
||||
) -> Result<P<ast::Expr>, ()> {
|
||||
) -> Result<P<ast::Expr>, Error> {
|
||||
let mut arms = vec![];
|
||||
|
||||
for (variant_index, variant) in enum_def.variants.iter().enumerate() {
|
||||
@@ -306,7 +307,7 @@ fn serialize_variant(
|
||||
ty: P<ast::Ty>,
|
||||
variant: &ast::Variant,
|
||||
variant_index: usize,
|
||||
) -> Result<ast::Arm, ()> {
|
||||
) -> Result<ast::Arm, Error> {
|
||||
let type_name = builder.expr().str(type_ident);
|
||||
let variant_ident = variant.node.name;
|
||||
let variant_name = builder.expr().str(variant_ident);
|
||||
@@ -479,7 +480,7 @@ fn serialize_struct_variant(
|
||||
structure_ty: P<ast::Ty>,
|
||||
fields: &[ast::StructField],
|
||||
field_names: Vec<Ident>,
|
||||
) -> Result<P<ast::Expr>, ()> {
|
||||
) -> Result<P<ast::Expr>, Error> {
|
||||
let value_ty = builder.ty().tuple()
|
||||
.with_tys(
|
||||
fields.iter().map(|field| {
|
||||
@@ -599,12 +600,12 @@ fn serialize_struct_visitor<I>(
|
||||
fields: &[ast::StructField],
|
||||
generics: &ast::Generics,
|
||||
value_exprs: I,
|
||||
) -> Result<(P<ast::Item>, P<ast::Item>), ()>
|
||||
) -> Result<(P<ast::Item>, P<ast::Item>), Error>
|
||||
where I: Iterator<Item=P<ast::Expr>>,
|
||||
{
|
||||
let value_exprs = value_exprs.collect::<Vec<_>>();
|
||||
|
||||
let field_attrs = try!(field::struct_field_attrs(cx, builder, fields));
|
||||
let field_attrs = try!(attr::get_struct_field_attrs(cx, builder, fields));
|
||||
|
||||
let arms: Vec<ast::Arm> = field_attrs.iter()
|
||||
.zip(value_exprs.iter())
|
||||
|
||||
Reference in New Issue
Block a user