diff --git a/tonic-types/src/richer_error/std_messages/bad_request.rs b/tonic-types/src/richer_error/std_messages/bad_request.rs index 078d09cdf..78923c87f 100644 --- a/tonic-types/src/richer_error/std_messages/bad_request.rs +++ b/tonic-types/src/richer_error/std_messages/bad_request.rs @@ -53,7 +53,8 @@ impl From for pb::bad_request::FieldViolation { pb::bad_request::FieldViolation { field: value.field, description: value.description, - ..Default::default() + reason: value.reason, + localized_message: value.localized_message.map(Into::into), } } } @@ -159,12 +160,12 @@ impl From for pb::BadRequest { #[cfg(test)] mod tests { use super::super::super::{FromAny, IntoAny}; - use super::BadRequest; + use super::{BadRequest, FieldViolation, LocalizedMessage}; #[test] fn gen_bad_request() { - let mut br_details = BadRequest::new(Vec::new()); - let formatted = format!("{br_details:?}"); + let empty_br_details = BadRequest::new(Vec::new()); + let formatted = format!("{empty_br_details:?}"); let expected = "BadRequest { field_violations: [] }"; @@ -174,17 +175,22 @@ mod tests { ); assert!( - br_details.is_empty(), + empty_br_details.is_empty(), "empty BadRequest returns 'false' from .is_empty()" ); - br_details - .add_violation("field_a", "description_a") - .add_violation("field_b", "description_b"); + let mut br_details = BadRequest::new(vec![FieldViolation { + field: "field_a".to_string(), + description: "description_a".to_string(), + reason: "REASON".to_string(), + localized_message: Some(LocalizedMessage::new("en-US", "localized error")), + }]); + + br_details.add_violation("field_b", "description_b"); let formatted = format!("{br_details:?}"); - let expected_filled = "BadRequest { field_violations: [FieldViolation { field: \"field_a\", description: \"description_a\", reason: \"\", localized_message: None }, FieldViolation { field: \"field_b\", description: \"description_b\", reason: \"\", localized_message: None }] }"; + let expected_filled = "BadRequest { field_violations: [FieldViolation { field: \"field_a\", description: \"description_a\", reason: \"REASON\", localized_message: Some(LocalizedMessage { locale: \"en-US\", message: \"localized error\" }) }, FieldViolation { field: \"field_b\", description: \"description_b\", reason: \"\", localized_message: None }] }"; assert!( formatted.eq(expected_filled), @@ -199,7 +205,7 @@ mod tests { let gen_any = br_details.into_any(); let formatted = format!("{gen_any:?}"); - let expected = "Any { type_url: \"type.googleapis.com/google.rpc.BadRequest\", value: [10, 24, 10, 7, 102, 105, 101, 108, 100, 95, 97, 18, 13, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 95, 97, 10, 24, 10, 7, 102, 105, 101, 108, 100, 95, 98, 18, 13, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 95, 98] }"; + let expected = "Any { type_url: \"type.googleapis.com/google.rpc.BadRequest\", value: [10, 58, 10, 7, 102, 105, 101, 108, 100, 95, 97, 18, 13, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 95, 97, 26, 6, 82, 69, 65, 83, 79, 78, 34, 24, 10, 5, 101, 110, 45, 85, 83, 18, 15, 108, 111, 99, 97, 108, 105, 122, 101, 100, 32, 101, 114, 114, 111, 114, 10, 24, 10, 7, 102, 105, 101, 108, 100, 95, 98, 18, 13, 100, 101, 115, 99, 114, 105, 112, 116, 105, 111, 110, 95, 98] }"; assert!( formatted.eq(expected),