1- use anyhow:: { bail, ensure} ;
1+ use anyhow:: { Context as _ , bail, ensure} ;
22use schemars:: schema:: { ObjectValidation , Schema , SchemaObject } ;
33
44use crate :: api:: {
@@ -25,16 +25,12 @@ impl SameString {
2525}
2626
2727impl TypeData {
28- pub ( super ) fn inline_struct_enum (
29- one_of : & Vec < Schema > ,
30- fields : & [ Field ] ,
31- ) -> anyhow:: Result < Self > {
28+ pub ( super ) fn inline_struct_enum ( one_of : & [ Schema ] , fields : & [ Field ] ) -> anyhow:: Result < Self > {
3229 let mut discriminator_field = SameString ( None ) ;
3330 let mut content_field = SameString ( None ) ;
34-
3531 let mut variants = vec ! [ ] ;
3632
37- for s in one_of {
33+ let mut process_one_of = | s : & Schema | {
3834 let variant = get_obj_validation ( s) ?;
3935
4036 let ( variant_discriminator_name, discriminator) = get_discriminator ( variant) ?;
@@ -62,15 +58,23 @@ impl TypeData {
6258 content,
6359 } ) ;
6460 }
61+
62+ Ok ( ( ) )
63+ } ;
64+
65+ for ( idx, s) in one_of. iter ( ) . enumerate ( ) {
66+ process_one_of ( s) . with_context ( || format ! ( "oneOf[{idx}]" ) ) ?;
6567 }
6668
6769 Ok ( Self :: StructEnum {
6870 discriminator_field : discriminator_field
6971 . inner ( )
70- . expect ( "failed to fine discriminator field" ) ,
72+ . context ( "failed to find discriminator field" ) ? ,
7173 fields : fields. to_vec ( ) ,
7274 repr : StructEnumRepr :: AdjacentlyTagged {
73- content_field : content_field. inner ( ) . expect ( "failed to fine content field" ) ,
75+ content_field : content_field
76+ . inner ( )
77+ . context ( "failed to find content field" ) ?,
7478 variants,
7579 } ,
7680 } )
@@ -108,7 +112,7 @@ fn get_discriminator(obj: &ObjectValidation) -> anyhow::Result<(String, String)>
108112 let mut discriminator = None ;
109113
110114 for ( p_name, p) in & obj. properties {
111- let schema_obj = get_schema_obj ( p) ?;
115+ let schema_obj = get_schema_obj ( p) . with_context ( || p_name . to_owned ( ) ) ?;
112116 if let Some ( enum_vals) = & schema_obj. enum_values
113117 && enum_vals. len ( ) == 1
114118 {
0 commit comments