Skip to content

Commit b60383e

Browse files
committed
event: Export duration
It's annoying not to be able to create a Duration outside of this package.
1 parent c50a1dd commit b60383e

File tree

2 files changed

+21
-19
lines changed

2 files changed

+21
-19
lines changed

event.go

+12-10
Original file line numberDiff line numberDiff line change
@@ -9,15 +9,17 @@ import (
99
"github.com/anaskhan96/soup"
1010
)
1111

12-
type duration struct {
12+
// Duration represents a interval of time
13+
type Duration struct {
1314
time.Duration
1415
}
1516

16-
func (d duration) MarshalJSON() (b []byte, err error) {
17+
// MarshalJSON marshals a Duration to JSON
18+
func (d Duration) MarshalJSON() (b []byte, err error) {
1719
return json.Marshal(d.Duration)
1820
}
1921

20-
func (d duration) String() string {
22+
func (d Duration) String() string {
2123
dur := d.Round(time.Minute)
2224
h := dur / time.Hour
2325
m := (dur - (h * time.Hour)) / time.Minute
@@ -50,8 +52,8 @@ func (d duration) String() string {
5052
// Event represents a single event at a GDQ
5153
type Event struct {
5254
Start time.Time `json:"start"`
53-
Setup duration `json:"setup"`
54-
Estimate duration `json:"estimate"`
55+
Setup Duration `json:"setup"`
56+
Estimate Duration `json:"estimate"`
5557
Runners []string `json:"runners"`
5658
Hosts []string `json:"hosts"`
5759
Title string `json:"title"`
@@ -114,18 +116,18 @@ func toDateTime(input string) time.Time {
114116
return res
115117
}
116118

117-
func toDuration(input string) duration {
119+
func toDuration(input string) Duration {
118120
if strings.TrimSpace(input) == "" {
119-
return duration{0}
121+
return Duration{0}
120122
}
121123
elems := strings.Split(strings.TrimSpace(input), ":")
122124
if len(elems) != 3 {
123-
return duration{0}
125+
return Duration{0}
124126
}
125127
entry := fmt.Sprintf("%sh%sm%ss", strings.TrimSpace(elems[0]), strings.TrimSpace(elems[1]), strings.TrimSpace(elems[2]))
126128
res, err := time.ParseDuration(entry)
127129
if err != nil {
128-
return duration{0}
130+
return Duration{0}
129131
}
130-
return duration{res}
132+
return Duration{res}
131133
}

event_test.go

+9-9
Original file line numberDiff line numberDiff line change
@@ -9,38 +9,38 @@ import (
99
)
1010

1111
func TestDurationMarshal(t *testing.T) {
12-
d := duration{0}
12+
d := Duration{0}
1313
j, err := d.MarshalJSON()
1414
assertEqual(t, err, nil)
1515
assertEqual(t, string(j), "0")
1616

17-
dn := duration{1*time.Hour + 1*time.Minute + 1*time.Second}
17+
dn := Duration{1*time.Hour + 1*time.Minute + 1*time.Second}
1818
jn, err := dn.MarshalJSON()
1919
assertEqual(t, err, nil)
2020
assertEqual(t, string(jn), "3661000000000")
2121
}
2222

2323
func TestDurationString(t *testing.T) {
2424
t.Run("no hours, no minutes", func(t *testing.T) {
25-
assertEqual(t, duration{0}.String(), "0 minutes")
25+
assertEqual(t, Duration{0}.String(), "0 minutes")
2626
})
2727
t.Run("one hour, no minutes", func(t *testing.T) {
28-
assertEqual(t, duration{1 * time.Hour}.String(), "1 hour")
28+
assertEqual(t, Duration{1 * time.Hour}.String(), "1 hour")
2929
})
3030
t.Run("one hour, one minute", func(t *testing.T) {
31-
assertEqual(t, duration{1*time.Hour + 1*time.Minute}.String(), "1 hour and 1 minute")
31+
assertEqual(t, Duration{1*time.Hour + 1*time.Minute}.String(), "1 hour and 1 minute")
3232
})
3333
t.Run("one hour, two minutes", func(t *testing.T) {
34-
assertEqual(t, duration{1*time.Hour + 2*time.Minute}.String(), "1 hour and 2 minutes")
34+
assertEqual(t, Duration{1*time.Hour + 2*time.Minute}.String(), "1 hour and 2 minutes")
3535
})
3636
t.Run("two hours, two minutes", func(t *testing.T) {
37-
assertEqual(t, duration{2*time.Hour + 2*time.Minute}.String(), "2 hours and 2 minutes")
37+
assertEqual(t, Duration{2*time.Hour + 2*time.Minute}.String(), "2 hours and 2 minutes")
3838
})
3939
t.Run("one minute", func(t *testing.T) {
40-
assertEqual(t, duration{1 * time.Minute}.String(), "1 minute")
40+
assertEqual(t, Duration{1 * time.Minute}.String(), "1 minute")
4141
})
4242
t.Run(" two minutes", func(t *testing.T) {
43-
assertEqual(t, duration{2 * time.Minute}.String(), "2 minutes")
43+
assertEqual(t, Duration{2 * time.Minute}.String(), "2 minutes")
4444
})
4545
}
4646

0 commit comments

Comments
 (0)