Skip to content

Commit

Permalink
fix(logging): Support numbers when unmarshaling Severity (#4216)
Browse files Browse the repository at this point in the history
* fix(logging): Support numbers when unmarshaling Severity

logging.Entry.Severity is written out as a JSON number during
Marshalling but has an UnmarshalJSON method that only supports Severity
as as string.

This commit adds support to unmarshal JSON numbers in addition to
strings so Marshalling then Unmarshalling the same object works without
error

* Run go fmt
  • Loading branch information
alutman committed Jun 14, 2021
1 parent 64dc099 commit a08b97d
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 3 deletions.
10 changes: 7 additions & 3 deletions logging/logging.go
Expand Up @@ -464,10 +464,14 @@ func (v Severity) String() string {
// Severity.
func (v *Severity) UnmarshalJSON(data []byte) error {
var s string
if err := json.Unmarshal(data, &s); err != nil {
return err
var i int
if strErr := json.Unmarshal(data, &s); strErr == nil {
*v = ParseSeverity(s)
} else if intErr := json.Unmarshal(data, &i); intErr == nil {
*v = Severity(i)
} else {
return fmt.Errorf("%v; %v", strErr, intErr)
}
*v = ParseSeverity(s)
return nil
}

Expand Down
31 changes: 31 additions & 0 deletions logging/logging_test.go
Expand Up @@ -806,3 +806,34 @@ func TestSeverityUnmarshal(t *testing.T) {
t.Fatalf("Severity: got %v, want %v", entry.Severity, logging.Error)
}
}

func TestSeverityAsNumberUnmarshal(t *testing.T) {
j := []byte(fmt.Sprintf(`{"logName": "test-log","severity": %d, "payload": "test"}`, logging.Info))
var entry logging.Entry
err := json.Unmarshal(j, &entry)
if err != nil {
t.Fatalf("en.Unmarshal: %v", err)
}
if entry.Severity != logging.Info {
t.Fatalf("Severity: got %v, want %v", entry.Severity, logging.Info)
}
}

func TestSeverityMarshalThenUnmarshal(t *testing.T) {
entry := logging.Entry{Severity: logging.Warning, Payload: "test"}
j, err := json.Marshal(entry)
if err != nil {
t.Fatalf("en.Marshal: %v", err)
}

var entryU logging.Entry

err = json.Unmarshal(j, &entryU)
if err != nil {
t.Fatalf("en.Unmarshal: %v", err)
}

if entryU.Severity != logging.Warning {
t.Fatalf("Severity: got %v, want %v", entryU.Severity, logging.Warning)
}
}

0 comments on commit a08b97d

Please sign in to comment.