Skip to content

Commit ef5e0b8

Browse files
authored
UnmarshalLogMessage to use json.Number (#178)
1 parent 3fe6fb2 commit ef5e0b8

File tree

2 files changed

+15
-8
lines changed

2 files changed

+15
-8
lines changed

logging_test.go

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package tfjson
44

55
import (
6+
"encoding/json"
67
"testing"
78
"time"
89

@@ -132,7 +133,7 @@ func TestLogging_query(t *testing.T) {
132133
DisplayName: "This is a easy-antelope",
133134
Identity: map[string]any{
134135
"id": "easy-antelope",
135-
"legs": float64(6),
136+
"legs": json.Number("6"),
136137
},
137138
IdentityVersion: 1,
138139
},

logging_types.go

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
package tfjson
44

55
import (
6+
"bytes"
67
"encoding/json"
78
)
89

@@ -29,31 +30,36 @@ var allLogMessageTypes = []any{
2930
}
3031

3132
func unmarshalByType(t LogMessageType, b []byte) (LogMsg, error) {
33+
d := json.NewDecoder(bytes.NewReader(b))
34+
35+
// decode numbers as json.Number to avoid losing precision
36+
d.UseNumber()
37+
3238
switch t {
3339

3440
// generic
3541
case MessageTypeVersion:
3642
v := VersionLogMessage{}
37-
return v, json.Unmarshal(b, &v)
43+
return v, d.Decode(&v)
3844
case MessageTypeLog:
3945
v := LogMessage{}
40-
return v, json.Unmarshal(b, &v)
46+
return v, d.Decode(&v)
4147
case MessageTypeDiagnostic:
4248
v := DiagnosticLogMessage{}
43-
return v, json.Unmarshal(b, &v)
49+
return v, d.Decode(&v)
4450

4551
// query
4652
case MessageListStart:
4753
v := ListStartMessage{}
48-
return v, json.Unmarshal(b, &v)
54+
return v, d.Decode(&v)
4955
case MessageListResourceFound:
5056
v := ListResourceFoundMessage{}
51-
return v, json.Unmarshal(b, &v)
57+
return v, d.Decode(&v)
5258
case MessageListComplete:
5359
v := ListCompleteMessage{}
54-
return v, json.Unmarshal(b, &v)
60+
return v, d.Decode(&v)
5561
}
5662

5763
v := UnknownLogMessage{}
58-
return v, json.Unmarshal(b, &v)
64+
return v, d.Decode(&v)
5965
}

0 commit comments

Comments
 (0)