@@ -109,7 +109,15 @@ pub async fn detect_schema(Json(json): Json<Value>) -> Result<impl Responder, St
109
109
if !has_more_than_max_allowed_levels ( & json, 1 ) {
110
110
//perform generic flattening, return error if failed to flatten
111
111
let mut flattened_json = match generic_flattening ( & json) {
112
- Ok ( flattened) => convert_to_array ( flattened) . unwrap ( ) ,
112
+ Ok ( flattened) => match convert_to_array ( flattened) {
113
+ Ok ( array) => array,
114
+ Err ( e) => {
115
+ return Err ( StreamError :: Custom {
116
+ msg : format ! ( "Failed to convert to array: {}" , e) ,
117
+ status : StatusCode :: BAD_REQUEST ,
118
+ } )
119
+ }
120
+ } ,
113
121
Err ( e) => {
114
122
return Err ( StreamError :: Custom {
115
123
msg : e. to_string ( ) ,
@@ -128,16 +136,26 @@ pub async fn detect_schema(Json(json): Json<Value>) -> Result<impl Responder, St
128
136
value @ Value :: Object ( _) => vec ! [ value] ,
129
137
_ => unreachable ! ( "flatten would have failed beforehand" ) ,
130
138
} ;
131
- let mut schema =
132
- Arc :: new ( infer_json_schema_from_iterator ( flattened_json_arr. iter ( ) . map ( Ok ) ) . unwrap ( ) ) ;
139
+ let mut schema = match infer_json_schema_from_iterator ( flattened_json_arr. iter ( ) . map ( Ok ) ) {
140
+ Ok ( schema) => Arc :: new ( schema) ,
141
+ Err ( e) => {
142
+ return Err ( StreamError :: Custom {
143
+ msg : format ! ( "Failed to infer schema: {}" , e) ,
144
+ status : StatusCode :: BAD_REQUEST ,
145
+ } )
146
+ }
147
+ } ;
133
148
for flattened_json in flattened_json_arr {
134
149
schema = override_data_type ( schema, flattened_json, SchemaVersion :: V1 ) ;
135
150
}
136
151
Ok ( ( web:: Json ( schema) , StatusCode :: OK ) )
137
152
} else {
138
153
// error out if the JSON is heavily nested
139
154
Err ( StreamError :: Custom {
140
- msg : "heavily nested, cannot flatten this JSON" . to_string ( ) ,
155
+ msg : format ! (
156
+ "JSON is too deeply nested (exceeds level {}), cannot flatten" ,
157
+ PARSEABLE . options. event_flatten_level
158
+ ) ,
141
159
status : StatusCode :: BAD_REQUEST ,
142
160
} )
143
161
}
0 commit comments