@@ -17,6 +17,7 @@ struct Type {
17
17
variant : String ,
18
18
ident : String ,
19
19
kind : String ,
20
+ typtype : Option < String > ,
20
21
element : u32 ,
21
22
doc : String ,
22
23
}
@@ -217,12 +218,18 @@ fn parse_types() -> BTreeMap<u32, Type> {
217
218
continue ;
218
219
}
219
220
221
+ let typtype = raw_type. get ( "typtype" ) . cloned ( ) ;
222
+
220
223
let element = match & * kind {
221
- "R" => match & * raw_type[ "typtype" ] {
224
+ "R" => match typtype
225
+ . as_ref ( )
226
+ . expect ( "range type must have typtype" )
227
+ . as_str ( )
228
+ {
222
229
"r" => range_elements[ & oid] ,
223
230
"m" => multi_range_elements[ & oid] ,
224
231
typtype => panic ! ( "invalid range typtype {}" , typtype) ,
225
- }
232
+ } ,
226
233
"A" => oids_by_name[ & raw_type[ "typelem" ] ] ,
227
234
_ => 0 ,
228
235
} ;
@@ -248,6 +255,7 @@ fn parse_types() -> BTreeMap<u32, Type> {
248
255
variant,
249
256
ident,
250
257
kind : "A" . to_string ( ) ,
258
+ typtype : None ,
251
259
element : oid,
252
260
doc,
253
261
} ;
@@ -259,6 +267,7 @@ fn parse_types() -> BTreeMap<u32, Type> {
259
267
variant,
260
268
ident,
261
269
kind,
270
+ typtype,
262
271
element,
263
272
doc,
264
273
} ;
@@ -362,7 +371,16 @@ fn make_impl(w: &mut BufWriter<File>, types: &BTreeMap<u32, Type>) {
362
371
let kind = match & * type_. kind {
363
372
"P" => "Pseudo" . to_owned ( ) ,
364
373
"A" => format ! ( "Array(Type(Inner::{}))" , types[ & type_. element] . variant) ,
365
- "R" => format ! ( "Range(Type(Inner::{}))" , types[ & type_. element] . variant) ,
374
+ "R" => match type_
375
+ . typtype
376
+ . as_ref ( )
377
+ . expect ( "range type must have typtype" )
378
+ . as_str ( )
379
+ {
380
+ "r" => format ! ( "Range(Type(Inner::{}))" , types[ & type_. element] . variant) ,
381
+ "m" => format ! ( "Multirange(Type(Inner::{}))" , types[ & type_. element] . variant) ,
382
+ typtype => panic ! ( "invalid range typtype {}" , typtype) ,
383
+ } ,
366
384
_ => "Simple" . to_owned ( ) ,
367
385
} ;
368
386
0 commit comments