@@ -1126,8 +1126,8 @@ impl<'de> Deserialize<'de> for BrpRequest {
11261126 return Err ( de:: Error :: missing_field ( "jsonrpc" ) ) ;
11271127 }
11281128 let method = method. ok_or_else ( || de:: Error :: missing_field ( "method" ) ) ?;
1129- let id = id. ok_or_else ( || de :: Error :: missing_field ( "id" ) ) ? ;
1130- let params = params. ok_or_else ( || de :: Error :: missing_field ( "params" ) ) ? ;
1129+ let id = id. flatten ( ) ;
1130+ let params = params. flatten ( ) ;
11311131 Ok ( BrpRequest { method, id, params } )
11321132 }
11331133 }
@@ -1449,3 +1449,41 @@ fn remove_closed_watching_requests(mut requests: ResMut<RemoteWatchingRequests>)
14491449 }
14501450 }
14511451}
1452+
1453+ #[ cfg( test) ]
1454+ mod tests {
1455+ use crate :: BrpRequest ;
1456+ use serde_json:: json;
1457+
1458+ #[ test]
1459+ fn deserialize_brp_request_params_optional ( ) {
1460+ let request_json: & str = r#"{
1461+ "jsonrpc": "2.0",
1462+ "method": "world.list_components",
1463+ "id": 1
1464+ }"# ;
1465+
1466+ let request: BrpRequest = serde_json:: from_str ( request_json) . unwrap ( ) ;
1467+
1468+ assert_eq ! ( request. method, "world.list_components" ) ;
1469+ assert_eq ! ( request. id, Some ( json!( 1 ) ) ) ;
1470+ assert_eq ! ( request. params, None ) ;
1471+ }
1472+
1473+ #[ test]
1474+ fn deserialize_brp_request_id_optional ( ) {
1475+ let request_json: & str = r#"{
1476+ "jsonrpc": "2.0",
1477+ "method": "world.list_components",
1478+ "params": {
1479+ "number": 5
1480+ }
1481+ }"# ;
1482+
1483+ let request: BrpRequest = serde_json:: from_str ( request_json) . unwrap ( ) ;
1484+
1485+ assert_eq ! ( request. method, "world.list_components" ) ;
1486+ assert_eq ! ( request. id, None ) ;
1487+ assert_eq ! ( request. params, Some ( json!( { "number" : 5 } ) ) ) ;
1488+ }
1489+ }
0 commit comments