@@ -457,7 +457,7 @@ fn array_schemas_mutually_exclusive(
457
457
/// otherwise return None.
458
458
pub ( crate ) fn constant_string_value ( schema : & Schema ) -> Option < & str > {
459
459
match schema {
460
- // Strings must be simple enumerations .
460
+ // Singleton, typed enumerated value .
461
461
Schema :: Object ( SchemaObject {
462
462
metadata : _,
463
463
instance_type : Some ( SingleOrVec :: Single ( single) ) ,
@@ -471,13 +471,58 @@ pub(crate) fn constant_string_value(schema: &Schema) -> Option<&str> {
471
471
object : None ,
472
472
reference : None ,
473
473
extensions : _,
474
- } ) if single. as_ref ( ) == & InstanceType :: String => {
475
- if values. len ( ) == 1 {
476
- values. get ( 0 ) . and_then ( |value| value. as_str ( ) )
477
- } else {
478
- None
479
- }
474
+ } ) if single. as_ref ( ) == & InstanceType :: String && values. len ( ) == 1 => {
475
+ values. first ( ) . unwrap ( ) . as_str ( )
480
476
}
477
+
478
+ // Singleton, untyped enumerated value.
479
+ Schema :: Object ( SchemaObject {
480
+ metadata : _,
481
+ instance_type : None ,
482
+ format : None ,
483
+ enum_values : Some ( values) ,
484
+ const_value : None ,
485
+ subschemas : None ,
486
+ number : None ,
487
+ string : None ,
488
+ array : None ,
489
+ object : None ,
490
+ reference : None ,
491
+ extensions : _,
492
+ } ) if values. len ( ) == 1 => values. first ( ) . unwrap ( ) . as_str ( ) ,
493
+
494
+ // Constant value.
495
+ Schema :: Object ( SchemaObject {
496
+ metadata : _,
497
+ instance_type : Some ( SingleOrVec :: Single ( single) ) ,
498
+ format : None ,
499
+ enum_values : None ,
500
+ const_value : Some ( value) ,
501
+ subschemas : None ,
502
+ number : None ,
503
+ string : None ,
504
+ array : None ,
505
+ object : None ,
506
+ reference : None ,
507
+ extensions : _,
508
+ } ) if single. as_ref ( ) == & InstanceType :: String => value. as_str ( ) ,
509
+
510
+ // Constant, untyped value.
511
+ Schema :: Object ( SchemaObject {
512
+ metadata : _,
513
+ instance_type : None ,
514
+ format : None ,
515
+ enum_values : None ,
516
+ const_value : Some ( value) ,
517
+ subschemas : None ,
518
+ number : None ,
519
+ string : None ,
520
+ array : None ,
521
+ object : None ,
522
+ reference : None ,
523
+ extensions : _,
524
+ } ) => value. as_str ( ) ,
525
+
481
526
_ => None ,
482
527
}
483
528
}
0 commit comments