Skip to content

Commit 61a54e1

Browse files
committed
fix: add marshaler
Signed-off-by: Carlos Alexandro Becker <[email protected]>
1 parent 23deca4 commit 61a54e1

File tree

1 file changed

+186
-0
lines changed

1 file changed

+186
-0
lines changed

pkg/config/marshaler.go

Lines changed: 186 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,186 @@
1+
package config
2+
3+
import (
4+
"encoding/json"
5+
"strings"
6+
)
7+
8+
// MarshalJSON marshals a slack block as JSON.
9+
func (a SlackBlock) MarshalJSON() ([]byte, error) {
10+
return json.Marshal(a.Internal)
11+
}
12+
13+
// UnmarshalYAML is a custom unmarshaler that unmarshals a YAML slack attachment as untyped interface{}.
14+
func (a *SlackAttachment) UnmarshalYAML(unmarshal func(any) error) error {
15+
var yamlv2 any
16+
if err := unmarshal(&yamlv2); err != nil {
17+
return err
18+
}
19+
20+
a.Internal = yamlv2
21+
22+
return nil
23+
}
24+
25+
// MarshalJSON marshals a slack attachment as JSON.
26+
func (a SlackAttachment) MarshalJSON() ([]byte, error) {
27+
return json.Marshal(a.Internal)
28+
}
29+
30+
// UnmarshalYAML is a custom unmarshaler that allows simplified declarations of commands as strings.
31+
func (bh *Hook) UnmarshalYAML(unmarshal func(any) error) error {
32+
var cmd string
33+
if err := unmarshal(&cmd); err != nil {
34+
type t Hook
35+
var hook t
36+
if err := unmarshal(&hook); err != nil {
37+
return err
38+
}
39+
*bh = (Hook)(hook)
40+
return nil
41+
}
42+
43+
bh.Cmd = cmd
44+
return nil
45+
}
46+
47+
// UnmarshalYAML is a custom unmarshaler that wraps strings in arrays.
48+
func (f *File) UnmarshalYAML(unmarshal func(any) error) error {
49+
type t File
50+
var str string
51+
if err := unmarshal(&str); err == nil {
52+
*f = File{Source: str}
53+
return nil
54+
}
55+
56+
var file t
57+
if err := unmarshal(&file); err != nil {
58+
return err
59+
}
60+
*f = File(file)
61+
return nil
62+
}
63+
64+
// UnmarshalYAML is a custom unmarshaler that allows simplified declaration of single command.
65+
func (bhc *Hooks) UnmarshalYAML(unmarshal func(any) error) error {
66+
var singleCmd string
67+
err := unmarshal(&singleCmd)
68+
if err == nil {
69+
*bhc = []Hook{{Cmd: singleCmd}}
70+
return nil
71+
}
72+
73+
type t Hooks
74+
var hooks t
75+
if err := unmarshal(&hooks); err != nil {
76+
return err
77+
}
78+
*bhc = (Hooks)(hooks)
79+
return nil
80+
}
81+
82+
// UnmarshalYAML is a custom unmarshaler that wraps strings in arrays.
83+
func (a *FlagArray) UnmarshalYAML(unmarshal func(any) error) error {
84+
var flags []string
85+
if err := unmarshal(&flags); err != nil {
86+
var flagstr string
87+
if err := unmarshal(&flagstr); err != nil {
88+
return err
89+
}
90+
*a = strings.Fields(flagstr)
91+
} else {
92+
*a = flags
93+
}
94+
return nil
95+
}
96+
97+
// UnmarshalYAML is a custom unmarshaler that unmarshals a YAML slack block as untyped interface{}.
98+
func (a *SlackBlock) UnmarshalYAML(unmarshal func(any) error) error {
99+
var yamlv2 any
100+
if err := unmarshal(&yamlv2); err != nil {
101+
return err
102+
}
103+
104+
a.Internal = yamlv2
105+
106+
return nil
107+
}
108+
109+
// UnmarshalYAML is a custom unmarshaler that wraps strings in arrays.
110+
func (a *StringArray) UnmarshalYAML(unmarshal func(any) error) error {
111+
var strings []string
112+
if err := unmarshal(&strings); err != nil {
113+
var str string
114+
if err := unmarshal(&str); err != nil {
115+
return err
116+
}
117+
*a = []string{str}
118+
} else {
119+
*a = strings
120+
}
121+
return nil
122+
}
123+
124+
func (a *NixDependency) UnmarshalYAML(unmarshal func(any) error) error {
125+
var str string
126+
if err := unmarshal(&str); err == nil {
127+
a.Name = str
128+
return nil
129+
}
130+
131+
type t NixDependency
132+
var dep t
133+
if err := unmarshal(&dep); err != nil {
134+
return err
135+
}
136+
137+
a.Name = dep.Name
138+
a.OS = dep.OS
139+
140+
return nil
141+
}
142+
143+
// type alias to prevent stack overflowing in the custom unmarshaler.
144+
type pullRequestBase PullRequestBase
145+
146+
// UnmarshalYAML is a custom unmarshaler that accept brew deps in both the old and new format.
147+
func (a *PullRequestBase) UnmarshalYAML(unmarshal func(any) error) error {
148+
var str string
149+
if err := unmarshal(&str); err == nil {
150+
a.Branch = str
151+
return nil
152+
}
153+
154+
var base pullRequestBase
155+
if err := unmarshal(&base); err != nil {
156+
return err
157+
}
158+
159+
a.Branch = base.Branch
160+
a.Owner = base.Owner
161+
a.Name = base.Name
162+
163+
return nil
164+
}
165+
166+
// UnmarshalYAML is a custom unmarshaler that accept brew deps in both the old and new format.
167+
func (a *HomebrewDependency) UnmarshalYAML(unmarshal func(any) error) error {
168+
var str string
169+
if err := unmarshal(&str); err == nil {
170+
a.Name = str
171+
return nil
172+
}
173+
174+
type t HomebrewDependency
175+
var dep t
176+
if err := unmarshal(&dep); err != nil {
177+
return err
178+
}
179+
180+
a.Name = dep.Name
181+
a.Type = dep.Type
182+
a.Version = dep.Version
183+
a.OS = dep.OS
184+
185+
return nil
186+
}

0 commit comments

Comments
 (0)