Skip to content

Commit 6789d91

Browse files
committed
define custom marshaller
1 parent a0eb7e6 commit 6789d91

File tree

2 files changed

+28
-12
lines changed

2 files changed

+28
-12
lines changed

sentry/metric_alerts_test.go

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ func TestMetricAlertService_List(t *testing.T) {
9595
AlertRuleTriggerID: String("12345"),
9696
Type: String("slack"),
9797
TargetType: String("specific"),
98-
TargetIdentifier: &Int64OrString{IsString: true, String: "#alert-rule-alerts"},
98+
TargetIdentifier: &Int64OrString{IsString: true, StringVal: "#alert-rule-alerts"},
9999
InputChannelID: String("C038NF00X4F"),
100100
IntegrationID: Int(123),
101101
DateCreated: Time(mustParseTime("2022-04-07T16:46:49.154638Z")),
@@ -195,7 +195,7 @@ func TestMetricAlertService_Get(t *testing.T) {
195195
AlertRuleTriggerID: String("56789"),
196196
Type: String("slack"),
197197
TargetType: String("specific"),
198-
TargetIdentifier: &Int64OrString{IsString: true, String: "#alert-rule-alerts"},
198+
TargetIdentifier: &Int64OrString{IsString: true, StringVal: "#alert-rule-alerts"},
199199
InputChannelID: String("C0XXXFKLXXX"),
200200
IntegrationID: Int(111),
201201
DateCreated: Time(mustParseTime("2022-04-15T15:06:01.087054Z")),
@@ -339,7 +339,7 @@ func TestMetricAlertsService_CreateWithAsyncTask(t *testing.T) {
339339
AlertRuleTriggerID: String("56789"),
340340
Type: String("slack"),
341341
TargetType: String("specific"),
342-
TargetIdentifier: &Int64OrString{IsString: true, String: "#alert-rule-alerts"},
342+
TargetIdentifier: &Int64OrString{IsString: true, StringVal: "#alert-rule-alerts"},
343343
InputChannelID: String("C0XXXFKLXXX"),
344344
IntegrationID: Int(123),
345345
DateCreated: Time(mustParseTime("2022-04-15T15:06:01.087054Z")),
@@ -381,7 +381,7 @@ func TestMetricAlertsService_CreateWithAsyncTask(t *testing.T) {
381381
AlertRuleTriggerID: String("56789"),
382382
Type: String("slack"),
383383
TargetType: String("specific"),
384-
TargetIdentifier: &Int64OrString{IsString: true, String: "#alert-rule-alerts"},
384+
TargetIdentifier: &Int64OrString{IsString: true, StringVal: "#alert-rule-alerts"},
385385
InputChannelID: String("C0XXXFKLXXX"),
386386
IntegrationID: Int(111),
387387
DateCreated: Time(mustParseTime("2022-04-15T15:06:01.087054Z")),
@@ -475,7 +475,7 @@ func TestMetricAlertService_Create(t *testing.T) {
475475
AlertRuleTriggerID: String("56789"),
476476
Type: String("slack"),
477477
TargetType: String("specific"),
478-
TargetIdentifier: &Int64OrString{IsString: true, String: "#alert-rule-alerts"},
478+
TargetIdentifier: &Int64OrString{IsString: true, StringVal: "#alert-rule-alerts"},
479479
InputChannelID: String("C0XXXFKLXXX"),
480480
IntegrationID: Int(123),
481481
DateCreated: Time(mustParseTime("2022-04-15T15:06:01.087054Z")),
@@ -517,7 +517,7 @@ func TestMetricAlertService_Create(t *testing.T) {
517517
AlertRuleTriggerID: String("56789"),
518518
Type: String("slack"),
519519
TargetType: String("specific"),
520-
TargetIdentifier: &Int64OrString{IsString: true, String: "#alert-rule-alerts"},
520+
TargetIdentifier: &Int64OrString{IsString: true, StringVal: "#alert-rule-alerts"},
521521
InputChannelID: String("C0XXXFKLXXX"),
522522
IntegrationID: Int(111),
523523
DateCreated: Time(mustParseTime("2022-04-15T15:06:01.087054Z")),
@@ -668,7 +668,7 @@ func TestMetricAlertService_Update(t *testing.T) {
668668
AlertRuleTriggerID: String("56789"),
669669
Type: String("slack"),
670670
TargetType: String("specific"),
671-
TargetIdentifier: &Int64OrString{IsString: true, String: "#alert-rule-alerts"},
671+
TargetIdentifier: &Int64OrString{IsString: true, StringVal: "#alert-rule-alerts"},
672672
InputChannelID: String("C0XXXFKLXXX"),
673673
IntegrationID: Int(111),
674674
DateCreated: Time(mustParseTime("2022-04-15T15:06:01.087054Z")),

sentry/types.go

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ type BoolOrStringSlice struct {
1515
}
1616

1717
var _ json.Unmarshaler = (*BoolOrStringSlice)(nil)
18+
var _ json.Marshaler = (*BoolOrStringSlice)(nil)
1819

1920
// UnmarshalJSON implements json.Unmarshaler.
2021
func (bos *BoolOrStringSlice) UnmarshalJSON(data []byte) error {
@@ -40,16 +41,24 @@ func (bos *BoolOrStringSlice) UnmarshalJSON(data []byte) error {
4041
return fmt.Errorf("unable to unmarshal as bool or string slice: %s", string(data))
4142
}
4243

44+
func (bos BoolOrStringSlice) MarshalJSON() ([]byte, error) {
45+
if bos.IsBool {
46+
return json.Marshal(bos.BoolVal)
47+
}
48+
return json.Marshal(bos.StringSliceVal)
49+
}
50+
4351
// Int64OrString is a type that can be unmarshaled from either an int64 or a
4452
// string.
4553
type Int64OrString struct {
46-
IsInt64 bool
47-
IsString bool
48-
Int64Val int64
49-
String string
54+
IsInt64 bool
55+
IsString bool
56+
Int64Val int64
57+
StringVal string
5058
}
5159

5260
var _ json.Unmarshaler = (*Int64OrString)(nil)
61+
var _ json.Marshaler = (*Int64OrString)(nil)
5362

5463
func (ios *Int64OrString) UnmarshalJSON(data []byte) error {
5564
// Try to unmarshal as an int64
@@ -66,10 +75,17 @@ func (ios *Int64OrString) UnmarshalJSON(data []byte) error {
6675
if err := json.Unmarshal(data, &stringVal); err == nil {
6776
ios.IsInt64 = false
6877
ios.IsString = true
69-
ios.String = stringVal
78+
ios.StringVal = stringVal
7079
return nil
7180
}
7281

7382
// If neither worked, return an error
7483
return fmt.Errorf("unable to unmarshal as int64 or string: %s", string(data))
7584
}
85+
86+
func (ios Int64OrString) MarshalJSON() ([]byte, error) {
87+
if ios.IsInt64 {
88+
return json.Marshal(ios.Int64Val)
89+
}
90+
return json.Marshal(ios.StringVal)
91+
}

0 commit comments

Comments
 (0)