From d93be73890d0db0d34afaaebd3db1b87d68fb9b7 Mon Sep 17 00:00:00 2001 From: Nadrieril Date: Tue, 16 Apr 2019 21:54:32 +0200 Subject: Prepare for nullary union variants --- dhall_generator/src/derive.rs | 35 +++++++++++++---------------------- 1 file changed, 13 insertions(+), 22 deletions(-) (limited to 'dhall_generator/src/derive.rs') diff --git a/dhall_generator/src/derive.rs b/dhall_generator/src/derive.rs index 740081a..852ffc8 100644 --- a/dhall_generator/src/derive.rs +++ b/dhall_generator/src/derive.rs @@ -71,35 +71,26 @@ fn derive_for_enum( .iter() .map(|v| { let name = dhall_core::Label::from(v.ident.to_string()); - let ty = match &v.fields { + match &v.fields { + syn::Fields::Unit => Ok((name, None)), syn::Fields::Unnamed(fields) if fields.unnamed.is_empty() => { - Err(Error::new( - v.span(), - "Nullary variants are not supported", - )) + Ok((name, None)) } - syn::Fields::Unnamed(fields) if fields.unnamed.len() > 1 => { - Err(Error::new( - v.span(), - "Variants with more than one field are not supported", - )) + syn::Fields::Unnamed(fields) if fields.unnamed.len() == 1 => { + let ty = &fields.unnamed.iter().next().unwrap().ty; + constraints.push(ty.clone()); + let ty = get_simple_static_type(ty); + Ok((name, Some(quote!(#ty.into())))) } - syn::Fields::Unnamed(fields) => { - Ok(&fields.unnamed.iter().next().unwrap().ty) - } - syn::Fields::Named(_) => Err(Error::new( + syn::Fields::Unnamed(_) => Err(Error::new( v.span(), - "Named variants are not supported", + "Variants with more than one field are not supported", )), - syn::Fields::Unit => Err(Error::new( + syn::Fields::Named(_) => Err(Error::new( v.span(), - "Nullary variants are not supported", + "Named variants are not supported", )), - }; - let ty = ty?; - constraints.push(ty.clone()); - let ty = get_simple_static_type(ty); - Ok((name, quote!(#ty.into()))) + } }) .collect::>()?; -- cgit v1.2.3