@@ -45,10 +45,15 @@ func (RawFormat) Values() (kinds []string) {
4545 return
4646}
4747
48- func UnmarshalFromRaw (body []byte , format RawFormat , out proto.Message ) error {
49- validator , err := protovalidate .New ()
50- if err != nil {
51- return fmt .Errorf ("could not create validator: %w" , err )
48+ func FromRaw (body []byte , format RawFormat , out proto.Message , doValidate bool ) error {
49+ var validator * protovalidate.Validator
50+ var err error
51+
52+ if doValidate {
53+ validator , err = protovalidate .New ()
54+ if err != nil {
55+ return fmt .Errorf ("could not create validator: %w" , err )
56+ }
5257 }
5358
5459 switch format {
@@ -58,7 +63,11 @@ func UnmarshalFromRaw(body []byte, format RawFormat, out proto.Message) error {
5863 }
5964 case RawFormatYAML :
6065 // protoyaml allows validating the contract while unmarshalling
61- yamlOpts := protoyaml.UnmarshalOptions {Validator : validator }
66+ yamlOpts := protoyaml.UnmarshalOptions {}
67+ if doValidate {
68+ yamlOpts .Validator = validator
69+ }
70+
6271 if err := yamlOpts .Unmarshal (body , out ); err != nil {
6372 return fmt .Errorf ("error unmarshalling raw message: %w" , err )
6473 }
@@ -77,10 +86,13 @@ func UnmarshalFromRaw(body []byte, format RawFormat, out proto.Message) error {
7786 return fmt .Errorf ("unsupported format: %s" , format )
7887 }
7988
80- err = validator .Validate (out )
81- if err != nil {
82- return fmt .Errorf ("error validating raw message: %w" , err )
89+ if validator != nil {
90+ err = validator .Validate (out )
91+ if err != nil {
92+ return fmt .Errorf ("error validating raw message: %w" , err )
93+ }
8394 }
95+
8496 return nil
8597}
8698
0 commit comments