Skip to content
Snippets Groups Projects
Commit c4ae36b0 authored by Sander van Harmelen's avatar Sander van Harmelen
Browse files

Make a custom marshaller for merge params

Fixes #626
parent 58470707
No related branches found
No related tags found
No related merge requests found
......@@ -17,6 +17,9 @@
package gitlab
import (
"encoding/json"
"fmt"
"strconv"
"time"
)
......@@ -533,9 +536,7 @@ type MergeEvent struct {
LockedAt string `json:"locked_at"`
UpdatedByID int `json:"updated_by_id"`
MergeError string `json:"merge_error"`
MergeParams struct {
ForceRemoveSourceBranch string `json:"force_remove_source_branch"`
} `json:"merge_params"`
MergeParams *MergeParams `json:"merge_params"`
MergeWhenBuildSucceeds bool `json:"merge_when_build_succeeds"`
MergeUserID int `json:"merge_user_id"`
MergeCommitSHA string `json:"merge_commit_sha"`
......@@ -594,6 +595,45 @@ type MergeEvent struct {
} `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.
//
// GitLab API docs:
......
......@@ -416,7 +416,7 @@ func (p *JiraServiceProperties) UnmarshalJSON(b []byte) error {
switch id := raw.JiraIssueTransitionID.(type) {
case nil:
p.JiraIssueTransitionID = ""
// No action needed.
case string:
p.JiraIssueTransitionID = id
case float64:
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment