From 52823d8be5714ef3f464d7b387b3fb706d3d3574 Mon Sep 17 00:00:00 2001 From: Sean Berry Date: Thu, 14 Jun 2018 11:44:30 -0700 Subject: [PATCH] Add custom UnmarshalJSON methods for DifferentialRevision and DifferentialQueryRequest to handle change in reviewers type from []string to map[string]string in conduit api. Each value in the map is the same as the key, so we just need to read the keys --- .../etcinit/gonduit/entities/differential.go | 24 +++++++++++++++++- .../gonduit/requests/differential_query.go | 25 ++++++++++++++++++- 2 files changed, 47 insertions(+), 2 deletions(-) diff --git a/vendor/github.com/etcinit/gonduit/entities/differential.go b/vendor/github.com/etcinit/gonduit/entities/differential.go index 9d762b9..a383c60 100644 --- a/vendor/github.com/etcinit/gonduit/entities/differential.go +++ b/vendor/github.com/etcinit/gonduit/entities/differential.go @@ -1,6 +1,9 @@ package entities -import "github.com/etcinit/gonduit/util" +import ( + "encoding/json" + "github.com/etcinit/gonduit/util" +) // DifferentialRevision represents a revision in Differential. type DifferentialRevision struct { @@ -26,3 +29,22 @@ type DifferentialRevision struct { Auxiliary map[string][]string `json:"auxiliary"` RepositoryPHID string `json:"repositoryPHID"` } + +func (dr *DifferentialRevision) UnmarshalJSON(data []byte) error { + type Alias DifferentialRevision + temp := &struct { + Reviewers map[string]string `json:"reviewers"` + *Alias + }{ + Alias: (*Alias)(dr), + } + if err := json.Unmarshal(data, &temp); err != nil { + return err + } + + for reviewer := range temp.Reviewers { + dr.Reviewers = append(dr.Reviewers, reviewer) + } + + return nil +} diff --git a/vendor/github.com/etcinit/gonduit/requests/differential_query.go b/vendor/github.com/etcinit/gonduit/requests/differential_query.go index a780194..c383edd 100644 --- a/vendor/github.com/etcinit/gonduit/requests/differential_query.go +++ b/vendor/github.com/etcinit/gonduit/requests/differential_query.go @@ -1,6 +1,9 @@ package requests -import "github.com/etcinit/gonduit/constants" +import ( + "github.com/etcinit/gonduit/constants" + "encoding/json" +) // DifferentialQueryRequest represents a request to the // differential.query call. @@ -21,3 +24,23 @@ type DifferentialQueryRequest struct { Branches []string `json:"branches"` Request } + +func (dqr *DifferentialQueryRequest) UnmarshalJSON(data []byte) error { + type Alias DifferentialQueryRequest + temp := &struct { + Reviewers map[string]string `json:"reviewers"` + *Alias + }{ + Alias: (*Alias)(dqr), + } + if err := json.Unmarshal(data, &temp); err != nil { + return err + } + + dqr.Reviewers = []string{} + for reviewer := range temp.Reviewers { + dqr.Reviewers = append(dqr.Reviewers, reviewer) + } + + return nil +} \ No newline at end of file