Skip to content

Commit 6278ce5

Browse files
authored
Empty fields Marshaled as "field":null (#172)
fixes #171 Signed-off-by: Spolti <filippespolti@gmail.com>
1 parent 2ee5933 commit 6278ce5

File tree

5 files changed

+191
-45
lines changed

5 files changed

+191
-45
lines changed

model/states.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ type BaseState struct {
104104
func (b *BaseState) MarshalJSON() ([]byte, error) {
105105
type Alias BaseState
106106
if b == nil {
107-
return []byte("null"), nil
107+
return nil, nil
108108
}
109109
cus, err := json.Marshal(struct {
110110
*Alias
@@ -148,7 +148,7 @@ type State struct {
148148

149149
func (s *State) MarshalJSON() ([]byte, error) {
150150
if s == nil {
151-
return []byte("null"), nil
151+
return nil, nil
152152
}
153153
r := []byte("")
154154
var errs error

model/switch_state.go

Lines changed: 18 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ package model
1616

1717
import (
1818
"encoding/json"
19+
"strings"
1920
)
2021

2122
// SwitchState is workflow's gateways: direct transitions onf a workflow based on certain conditions.
@@ -36,6 +37,23 @@ type SwitchState struct {
3637
Timeouts *SwitchStateTimeout `json:"timeouts,omitempty"`
3738
}
3839

40+
func (s *SwitchState) MarshalJSON() ([]byte, error) {
41+
type Alias SwitchState
42+
custom, err := json.Marshal(&struct {
43+
*Alias
44+
Timeouts *SwitchStateTimeout `json:"timeouts,omitempty"`
45+
}{
46+
Alias: (*Alias)(s),
47+
Timeouts: s.Timeouts,
48+
})
49+
50+
// Avoid marshal empty objects as null.
51+
st := strings.Replace(string(custom), "\"eventConditions\":null,", "", 1)
52+
st = strings.Replace(st, "\"dataConditions\":null,", "", 1)
53+
st = strings.Replace(st, "\"end\":null,", "", -1)
54+
return []byte(st), err
55+
}
56+
3957
// DefaultCondition Can be either a transition or end definition
4058
type DefaultCondition struct {
4159
// Serverless workflow states can have one or more incoming and outgoing transitions (from/to other states).
@@ -68,18 +86,6 @@ func (e *DefaultCondition) UnmarshalJSON(data []byte) error {
6886
return err
6987
}
7088

71-
func (s *SwitchState) MarshalJSON() ([]byte, error) {
72-
type Alias SwitchState
73-
custom, err := json.Marshal(&struct {
74-
*Alias
75-
Timeouts *SwitchStateTimeout `json:"timeouts,omitempty"`
76-
}{
77-
Alias: (*Alias)(s),
78-
Timeouts: s.Timeouts,
79-
})
80-
return custom, err
81-
}
82-
8389
// SwitchStateTimeout defines the specific timeout settings for switch state
8490
type SwitchStateTimeout struct {
8591
// Default workflow state execution timeout (ISO 8601 duration format)

model/util.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ import (
3131
"sigs.k8s.io/yaml"
3232
)
3333

34+
// Kind ...
3435
// +k8s:deepcopy-gen=false
35-
3636
type Kind interface {
3737
KindValues() []string
3838
String() string
@@ -41,6 +41,8 @@ type Kind interface {
4141
// TODO: Remove global variable
4242
var httpClient = http.Client{Timeout: time.Duration(1) * time.Second}
4343

44+
// UnmarshalError ...
45+
// +k8s:deepcopy-gen=false
4446
type UnmarshalError struct {
4547
err error
4648
parameterName string

model/zz_generated.deepcopy.go

Lines changed: 166 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

parser/parser_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -956,10 +956,10 @@ states:
956956
assert.True(t, strings.Contains(string(b), "{\"name\":\"ParallelExec\",\"type\":\"parallel\",\"transition\":{\"nextState\":\"CheckVisaStatusSwitchEventBased\"},\"branches\":[{\"name\":\"ShortDelayBranch\",\"actions\":[{\"subFlowRef\":{\"workflowId\":\"shortdelayworkflowid\",\"invoke\":\"sync\",\"onParentComplete\":\"terminate\"},\"actionDataFilter\":{\"useResults\":true}}],\"timeouts\":{\"actionExecTimeout\":\"PT5H\",\"branchExecTimeout\":\"PT6M\"}},{\"name\":\"LongDelayBranch\",\"actions\":[{\"subFlowRef\":{\"workflowId\":\"longdelayworkflowid\",\"invoke\":\"sync\",\"onParentComplete\":\"terminate\"},\"actionDataFilter\":{\"useResults\":true}}]}],\"completionType\":\"atLeast\",\"numCompleted\":13,\"timeouts\":{\"stateExecTimeout\":{\"single\":\"PT2S\",\"total\":\"PT1S\"},\"branchExecTimeout\":\"PT6M\"}}"))
957957

958958
// Switch State
959-
assert.True(t, strings.Contains(string(b), "{\"name\":\"CheckVisaStatusSwitchEventBased\",\"type\":\"switch\",\"defaultCondition\":{\"transition\":{\"nextState\":\"HelloStateWithDefaultConditionString\"}},\"eventConditions\":[{\"name\":\"visaApprovedEvent\",\"eventRef\":\"visaApprovedEventRef\",\"metadata\":{\"mastercard\":\"disallowed\",\"visa\":\"allowed\"},\"end\":null,\"transition\":{\"nextState\":\"HandleApprovedVisa\"}},{\"eventRef\":\"visaRejectedEvent\",\"metadata\":{\"test\":\"tested\"},\"end\":null,\"transition\":{\"nextState\":\"HandleRejectedVisa\"}}],\"dataConditions\":null,\"timeouts\":{\"stateExecTimeout\":{\"single\":\"PT20S\",\"total\":\"PT10S\"},\"eventTimeout\":\"PT10H\"}}"))
959+
assert.True(t, strings.Contains(string(b), "{\"name\":\"CheckVisaStatusSwitchEventBased\",\"type\":\"switch\",\"defaultCondition\":{\"transition\":{\"nextState\":\"HelloStateWithDefaultConditionString\"}},\"eventConditions\":[{\"name\":\"visaApprovedEvent\",\"eventRef\":\"visaApprovedEventRef\",\"metadata\":{\"mastercard\":\"disallowed\",\"visa\":\"allowed\"},\"transition\":{\"nextState\":\"HandleApprovedVisa\"}},{\"eventRef\":\"visaRejectedEvent\",\"metadata\":{\"test\":\"tested\"},\"transition\":{\"nextState\":\"HandleRejectedVisa\"}}],\"timeouts\":{\"stateExecTimeout\":{\"single\":\"PT20S\",\"total\":\"PT10S\"},\"eventTimeout\":\"PT10H\"}}"))
960960

961961
// Switch State with string DefaultCondition
962-
assert.True(t, strings.Contains(string(b), "{\"name\":\"HelloStateWithDefaultConditionString\",\"type\":\"switch\",\"defaultCondition\":{\"transition\":{\"nextState\":\"SendTextForHighPriority\"}},\"eventConditions\":null,\"dataConditions\":[{\"condition\":\"${ true }\",\"end\":null,\"transition\":{\"nextState\":\"HandleApprovedVisa\"}},{\"condition\":\"${ false }\",\"end\":null,\"transition\":{\"nextState\":\"HandleRejectedVisa\"}}]}"))
962+
assert.True(t, strings.Contains(string(b), "{\"name\":\"HelloStateWithDefaultConditionString\",\"type\":\"switch\",\"defaultCondition\":{\"transition\":{\"nextState\":\"SendTextForHighPriority\"}},\"dataConditions\":[{\"condition\":\"${ true }\",\"transition\":{\"nextState\":\"HandleApprovedVisa\"}},{\"condition\":\"${ false }\",\"transition\":{\"nextState\":\"HandleRejectedVisa\"}}]}"))
963963

964964
// Foreach State
965965
assert.True(t, strings.Contains(string(b), "{\"name\":\"SendTextForHighPriority\",\"type\":\"foreach\",\"transition\":{\"nextState\":\"HelloInject\"},\"inputCollection\":\"${ .messages }\",\"outputCollection\":\"${ .outputMessages }\",\"iterationParam\":\"${ .this }\",\"batchSize\":45,\"actions\":[{\"name\":\"test\",\"functionRef\":{\"refName\":\"sendTextFunction\",\"arguments\":{\"message\":\"${ .singlemessage }\"},\"invoke\":\"sync\"},\"eventRef\":{\"triggerEventRef\":\"example1\",\"resultEventRef\":\"example2\",\"resultEventTimeout\":\"PT12H\",\"invoke\":\"sync\"},\"actionDataFilter\":{\"useResults\":true}}],\"mode\":\"sequential\",\"timeouts\":{\"stateExecTimeout\":{\"single\":\"PT22S\",\"total\":\"PT11S\"},\"actionExecTimeout\":\"PT11H\"}}"))

0 commit comments

Comments
 (0)