@@ -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,40 @@ fn remove_closed_watching_requests(mut requests: ResMut<RemoteWatchingRequests>)
14491449 }
14501450 }
14511451}
1452+
1453+ mod tests {
1454+ use crate :: BrpRequest ;
1455+ use serde_json:: json;
1456+
1457+ #[ test]
1458+ fn deserialize_brp_request_params_optional ( ) {
1459+ let request_json: & str = r#"{
1460+ "jsonrpc": "2.0",
1461+ "method": "world.list_components",
1462+ "id": 1
1463+ }"# ;
1464+
1465+ let request: BrpRequest = serde_json:: from_str ( request_json) . unwrap ( ) ;
1466+
1467+ assert_eq ! ( request. method, "world.list_components" ) ;
1468+ assert_eq ! ( request. id, Some ( json!( 1 ) ) ) ;
1469+ assert_eq ! ( request. params, None ) ;
1470+ }
1471+
1472+ #[ test]
1473+ fn deserialize_brp_request_id_optional ( ) {
1474+ let request_json: & str = r#"{
1475+ "jsonrpc": "2.0",
1476+ "method": "world.list_components",
1477+ "params": {
1478+ "number": 5
1479+ }
1480+ }"# ;
1481+
1482+ let request: BrpRequest = serde_json:: from_str ( request_json) . unwrap ( ) ;
1483+
1484+ assert_eq ! ( request. method, "world.list_components" ) ;
1485+ assert_eq ! ( request. id, None ) ;
1486+ assert_eq ! ( request. params, Some ( json!( { "number" : 5 } ) ) ) ;
1487+ }
1488+ }
0 commit comments