Unverified Commit 9d665abb authored by Sander van Harmelen's avatar Sander van Harmelen Committed by GitHub

Merge pull request #628 from xanzy/svh/b-bool

Make a custom marshaller for merge params
parents 58470707 c4ae36b0
...@@ -17,6 +17,9 @@ ...@@ -17,6 +17,9 @@
package gitlab package gitlab
import ( import (
"encoding/json"
"fmt"
"strconv"
"time" "time"
) )
...@@ -512,41 +515,39 @@ type MergeEvent struct { ...@@ -512,41 +515,39 @@ type MergeEvent struct {
Visibility VisibilityValue `json:"visibility"` Visibility VisibilityValue `json:"visibility"`
} `json:"project"` } `json:"project"`
ObjectAttributes struct { ObjectAttributes struct {
ID int `json:"id"` ID int `json:"id"`
TargetBranch string `json:"target_branch"` TargetBranch string `json:"target_branch"`
SourceBranch string `json:"source_branch"` SourceBranch string `json:"source_branch"`
SourceProjectID int `json:"source_project_id"` SourceProjectID int `json:"source_project_id"`
AuthorID int `json:"author_id"` AuthorID int `json:"author_id"`
AssigneeID int `json:"assignee_id"` AssigneeID int `json:"assignee_id"`
Title string `json:"title"` Title string `json:"title"`
CreatedAt string `json:"created_at"` // Should be *time.Time (see Gitlab issue #21468) CreatedAt string `json:"created_at"` // Should be *time.Time (see Gitlab issue #21468)
UpdatedAt string `json:"updated_at"` // Should be *time.Time (see Gitlab issue #21468) UpdatedAt string `json:"updated_at"` // Should be *time.Time (see Gitlab issue #21468)
StCommits []*Commit `json:"st_commits"` StCommits []*Commit `json:"st_commits"`
StDiffs []*Diff `json:"st_diffs"` StDiffs []*Diff `json:"st_diffs"`
MilestoneID int `json:"milestone_id"` MilestoneID int `json:"milestone_id"`
State string `json:"state"` State string `json:"state"`
MergeStatus string `json:"merge_status"` MergeStatus string `json:"merge_status"`
TargetProjectID int `json:"target_project_id"` TargetProjectID int `json:"target_project_id"`
IID int `json:"iid"` IID int `json:"iid"`
Description string `json:"description"` Description string `json:"description"`
Position int `json:"position"` Position int `json:"position"`
LockedAt string `json:"locked_at"` LockedAt string `json:"locked_at"`
UpdatedByID int `json:"updated_by_id"` UpdatedByID int `json:"updated_by_id"`
MergeError string `json:"merge_error"` MergeError string `json:"merge_error"`
MergeParams struct { MergeParams *MergeParams `json:"merge_params"`
ForceRemoveSourceBranch string `json:"force_remove_source_branch"` MergeWhenBuildSucceeds bool `json:"merge_when_build_succeeds"`
} `json:"merge_params"` MergeUserID int `json:"merge_user_id"`
MergeWhenBuildSucceeds bool `json:"merge_when_build_succeeds"` MergeCommitSHA string `json:"merge_commit_sha"`
MergeUserID int `json:"merge_user_id"` DeletedAt string `json:"deleted_at"`
MergeCommitSHA string `json:"merge_commit_sha"` ApprovalsBeforeMerge string `json:"approvals_before_merge"`
DeletedAt string `json:"deleted_at"` RebaseCommitSHA string `json:"rebase_commit_sha"`
ApprovalsBeforeMerge string `json:"approvals_before_merge"` InProgressMergeCommitSHA string `json:"in_progress_merge_commit_sha"`
RebaseCommitSHA string `json:"rebase_commit_sha"` LockVersion int `json:"lock_version"`
InProgressMergeCommitSHA string `json:"in_progress_merge_commit_sha"` TimeEstimate int `json:"time_estimate"`
LockVersion int `json:"lock_version"` Source *Repository `json:"source"`
TimeEstimate int `json:"time_estimate"` Target *Repository `json:"target"`
Source *Repository `json:"source"`
Target *Repository `json:"target"`
LastCommit struct { LastCommit struct {
ID string `json:"id"` ID string `json:"id"`
Message string `json:"message"` Message string `json:"message"`
...@@ -594,6 +595,45 @@ type MergeEvent struct { ...@@ -594,6 +595,45 @@ type MergeEvent struct {
} `json:"changes"` } `json:"changes"`
} }
// MergeParams represents the merge params.
type MergeParams struct {
ForceRemoveSourceBranch bool `json:"force_remove_source_branch"`
}
// UnmarshalJSON decodes the merge parameters
//
// This allows support of ForceRemoveSourceBranch for both type bool (>11.9) and string (<11.9)
func (p *MergeParams) UnmarshalJSON(b []byte) error {
type Alias MergeParams
raw := struct {
*Alias
ForceRemoveSourceBranch interface{} `json:"force_remove_source_branch"`
}{
Alias: (*Alias)(p),
}
err := json.Unmarshal(b, &raw)
if err != nil {
return err
}
switch v := raw.ForceRemoveSourceBranch.(type) {
case nil:
// No action needed.
case bool:
p.ForceRemoveSourceBranch = v
case string:
p.ForceRemoveSourceBranch, err = strconv.ParseBool(v)
if err != nil {
return err
}
default:
return fmt.Errorf("failed to unmarshal ForceRemoveSourceBranch of type: %T", v)
}
return nil
}
// WikiPageEvent represents a wiki page event. // WikiPageEvent represents a wiki page event.
// //
// GitLab API docs: // GitLab API docs:
......
...@@ -416,7 +416,7 @@ func (p *JiraServiceProperties) UnmarshalJSON(b []byte) error { ...@@ -416,7 +416,7 @@ func (p *JiraServiceProperties) UnmarshalJSON(b []byte) error {
switch id := raw.JiraIssueTransitionID.(type) { switch id := raw.JiraIssueTransitionID.(type) {
case nil: case nil:
p.JiraIssueTransitionID = "" // No action needed.
case string: case string:
p.JiraIssueTransitionID = id p.JiraIssueTransitionID = id
case float64: case float64:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment