From 8521f01488e8d0e057ac4433140ef7b912ff3ec9 Mon Sep 17 00:00:00 2001 From: Maik Klein Date: Mon, 20 Aug 2018 07:30:10 +0200 Subject: [PATCH] Switch to manual_derives --- ash/src/vk.rs | 10 +++++----- generator/src/lib.rs | 30 ++++++++++-------------------- 2 files changed, 15 insertions(+), 25 deletions(-) diff --git a/ash/src/vk.rs b/ash/src/vk.rs index b18aa34..56056c2 100644 --- a/ash/src/vk.rs +++ b/ash/src/vk.rs @@ -4977,13 +4977,13 @@ pub struct Offset3D { pub z: int32_t, } #[repr(C)] -#[derive(Copy, Clone, Default, Debug, Hash, PartialEq)] +#[derive(Copy, Clone, Default, Debug)] pub struct Extent2D { pub width: uint32_t, pub height: uint32_t, } #[repr(C)] -#[derive(Copy, Clone, Default, Debug, Hash, PartialEq)] +#[derive(Copy, Clone, Default, Debug, PartialEq, Eq, Hash)] pub struct Extent3D { pub width: uint32_t, pub height: uint32_t, @@ -7402,7 +7402,7 @@ impl ::std::default::Default for FramebufferCreateInfo { } } #[repr(C)] -#[derive(Copy, Clone, Default, Debug, Hash, PartialEq)] +#[derive(Copy, Clone, Default, Debug)] pub struct DrawIndirectCommand { pub vertex_count: uint32_t, pub instance_count: uint32_t, @@ -7419,7 +7419,7 @@ pub struct DrawIndexedIndirectCommand { pub first_instance: uint32_t, } #[repr(C)] -#[derive(Copy, Clone, Default, Debug, Hash, PartialEq)] +#[derive(Copy, Clone, Default, Debug)] pub struct DispatchIndirectCommand { pub x: uint32_t, pub y: uint32_t, @@ -11467,7 +11467,7 @@ impl ::std::default::Default for DescriptorSetVariableDescriptorCountLayoutSuppo } } #[repr(C)] -#[derive(Copy, Clone, Default, Debug, Hash, PartialEq)] +#[derive(Copy, Clone, Default, Debug)] pub struct VertexInputBindingDivisorDescriptionEXT { pub binding: uint32_t, pub divisor: uint32_t, diff --git a/generator/src/lib.rs b/generator/src/lib.rs index 12e4bdc..4217001 100644 --- a/generator/src/lib.rs +++ b/generator/src/lib.rs @@ -1236,24 +1236,14 @@ pub fn derive_debug(_struct: &vkxml::Struct, union_types: &HashSet<&str>) -> Opt Some(q) } -pub fn auto_derive_partial_eq_hash(_struct: &vkxml::Struct) -> Tokens { - // TODO: Properly detect which types can implement PartialEq and Hash. - // At the moment we only implement it for structs that contain primitivet - // types. - let is_primitive = _struct - .elements - .iter() - .filter_map(|elem| match *elem { - vkxml::StructElement::Member(ref field) => Some(field), - _ => None, - }).all(|field| match field.basetype.as_str() { - "c_float" | "uint32_t" => true, - _ => false, - }); - if is_primitive { - quote!(Hash, PartialEq,) - } else { - quote!{} +/// At the moment `Ash` doesn't properly derive all the necessary drives +/// like Eq, Hash etc. +/// To Address some cases, you can add the name of the struct that you +/// require and add the missing derives yourself. +pub fn manual_derives(_struct: &vkxml::Struct) -> Tokens { + match _struct.name.as_str() { + "VkExtent3D" | "VKExtent2D" => quote!{PartialEq, Eq, Hash,}, + _ => quote!{}, } } pub fn generate_struct(_struct: &vkxml::Struct, union_types: &HashSet<&str>) -> Tokens { @@ -1271,7 +1261,7 @@ pub fn generate_struct(_struct: &vkxml::Struct, union_types: &HashSet<&str>) -> let debug_tokens = derive_debug(_struct, union_types); let default_tokens = derive_default(_struct); - let partial_eq_hash_str = auto_derive_partial_eq_hash(_struct); + let manual_derive_tokens = manual_derives(_struct); let dbg_str = if debug_tokens.is_none() { quote!(Debug,) } else { @@ -1284,7 +1274,7 @@ pub fn generate_struct(_struct: &vkxml::Struct, union_types: &HashSet<&str>) -> }; quote!{ #[repr(C)] - #[derive(Copy, Clone, #default_str #dbg_str #partial_eq_hash_str)] + #[derive(Copy, Clone, #default_str #dbg_str #manual_derive_tokens)] pub struct #name { #(#params,)* }