@@ -6,7 +6,7 @@ use proc_macro2::Span;
6
6
use proc_macro2:: TokenStream ;
7
7
use schema:: Schema ;
8
8
use selection:: Selection ;
9
- use std:: collections:: BTreeMap ;
9
+ use std:: collections:: { BTreeMap , BTreeSet } ;
10
10
use syn:: Ident ;
11
11
12
12
/// This holds all the information we need during the code generation phase.
@@ -120,21 +120,21 @@ impl<'query, 'schema> QueryContext<'query, 'schema> {
120
120
}
121
121
122
122
pub ( crate ) fn response_enum_derives ( & self ) -> TokenStream {
123
- let enum_derives: Vec < _ > = self
123
+ let always_derives = [
124
+ Ident :: new ( "Eq" , Span :: call_site ( ) ) ,
125
+ Ident :: new ( "PartialEq" , Span :: call_site ( ) ) ,
126
+ ] ;
127
+ let mut enum_derives: BTreeSet < _ > = self
124
128
. response_derives
125
129
. iter ( )
126
130
. filter ( |derive| {
127
131
!derive. to_string ( ) . contains ( "erialize" )
128
132
&& !derive. to_string ( ) . contains ( "Deserialize" )
129
133
} )
130
134
. collect ( ) ;
131
-
132
- if !enum_derives. is_empty ( ) {
133
- quote ! {
134
- #[ derive( #( #enum_derives) , * ) ]
135
- }
136
- } else {
137
- quote ! ( )
135
+ enum_derives. extend ( always_derives. iter ( ) ) ;
136
+ quote ! {
137
+ #[ derive( #( #enum_derives) , * ) ]
138
138
}
139
139
}
140
140
}
@@ -162,7 +162,10 @@ mod tests {
162
162
fn response_enum_derives_does_not_produce_empty_list ( ) {
163
163
let schema = :: schema:: Schema :: new ( ) ;
164
164
let context = QueryContext :: new_empty ( & schema) ;
165
- assert_eq ! ( context. response_enum_derives( ) . to_string( ) , "" ) ;
165
+ assert_eq ! (
166
+ context. response_enum_derives( ) . to_string( ) ,
167
+ "# [ derive ( Eq , PartialEq ) ]"
168
+ ) ;
166
169
}
167
170
168
171
#[ test]
@@ -176,7 +179,7 @@ mod tests {
176
179
177
180
assert_eq ! (
178
181
context. response_enum_derives( ) . to_string( ) ,
179
- "# [ derive ( PartialEq , PartialOrd ) ]"
182
+ "# [ derive ( Eq , PartialEq , PartialOrd ) ]"
180
183
) ;
181
184
}
182
185
0 commit comments