Skip to content

Commit 6f902ad

Browse files
committed
demo generics
1 parent 0ee71f4 commit 6f902ad

File tree

2 files changed

+9
-22
lines changed

2 files changed

+9
-22
lines changed

client.go

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ func (c *Castle) Filter(ctx context.Context, req *Request) (RecommendedAction, e
7676
Email: req.User.Email,
7777
Username: req.User.Name,
7878
}
79-
r := &castleFilterAPIRequest{
79+
r := &FilterRequest{
8080
Type: req.Event.EventType,
8181
Name: req.Event.Name,
8282
Status: req.Event.EventStatus,
@@ -86,7 +86,7 @@ func (c *Castle) Filter(ctx context.Context, req *Request) (RecommendedAction, e
8686
Properties: req.Properties,
8787
CreatedAt: time.Now(),
8888
}
89-
return c.sendCall(ctx, r, FilterEndpoint)
89+
return sendCall(ctx, c, r, FilterEndpoint)
9090
}
9191

9292
// Risk sends a risk request to castle.io
@@ -98,7 +98,7 @@ func (c *Castle) Risk(ctx context.Context, req *Request) (RecommendedAction, err
9898
if req.Context == nil {
9999
return RecommendedActionNone, errors.New("request.Context cannot be nil")
100100
}
101-
r := &castleRiskAPIRequest{
101+
r := &RiskRequest{
102102
Type: req.Event.EventType,
103103
Name: req.Event.Name,
104104
Status: req.Event.EventStatus,
@@ -108,10 +108,10 @@ func (c *Castle) Risk(ctx context.Context, req *Request) (RecommendedAction, err
108108
Properties: req.Properties,
109109
CreatedAt: time.Now(),
110110
}
111-
return c.sendCall(ctx, r, RiskEndpoint)
111+
return sendCall(ctx, c, r, RiskEndpoint)
112112
}
113113

114-
func (c *Castle) sendCall(ctx context.Context, r castleAPIRequest, url string) (_ RecommendedAction, err error) {
114+
func sendCall[Req castleAPIRequest](ctx context.Context, c *Castle, r Req, url string) (_ RecommendedAction, err error) {
115115
defer func() {
116116
if !c.metricsEnabled {
117117
return
@@ -126,12 +126,7 @@ func (c *Castle) sendCall(ctx context.Context, r castleAPIRequest, url string) (
126126

127127
b := new(bytes.Buffer)
128128

129-
switch request := r.(type) {
130-
case *castleRiskAPIRequest:
131-
err = json.NewEncoder(b).Encode(request)
132-
case *castleFilterAPIRequest:
133-
err = json.NewEncoder(b).Encode(request)
134-
}
129+
err = json.NewEncoder(b).Encode(r)
135130
if err != nil {
136131
return RecommendedActionNone, err
137132
}

model.go

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -77,10 +77,10 @@ type UserParams struct {
7777
}
7878

7979
type castleAPIRequest interface {
80-
GetEventType() EventType
80+
*FilterRequest | *RiskRequest
8181
}
8282

83-
type castleFilterAPIRequest struct {
83+
type FilterRequest struct {
8484
Type EventType `json:"type"`
8585
Name string `json:"name,omitempty"`
8686
Status EventStatus `json:"status"`
@@ -91,11 +91,7 @@ type castleFilterAPIRequest struct {
9191
CreatedAt time.Time `json:"created_at"`
9292
}
9393

94-
func (r *castleFilterAPIRequest) GetEventType() EventType {
95-
return r.Type
96-
}
97-
98-
type castleRiskAPIRequest struct {
94+
type RiskRequest struct {
9995
Type EventType `json:"type"`
10096
Name string `json:"name,omitempty"`
10197
Status EventStatus `json:"status"`
@@ -106,10 +102,6 @@ type castleRiskAPIRequest struct {
106102
CreatedAt time.Time `json:"created_at"`
107103
}
108104

109-
func (r *castleRiskAPIRequest) GetEventType() EventType {
110-
return r.Type
111-
}
112-
113105
type castleAPIResponse struct {
114106
Type string `json:"type"`
115107
Message string `json:"message"`

0 commit comments

Comments
 (0)