google / go-github

Go library for accessing the GitHub v3 API
https://pkg.go.dev/github.com/google/go-github/v63/github
BSD 3-Clause "New" or "Revised" License
10.29k stars 2.04k forks source link

Use enums for the action field in GitHub Webhooks #3127

Open prnvbn opened 5 months ago

prnvbn commented 5 months ago

Issue Description:

Many GitHub webhooks contain the action field, which is enumerated. For example, in the GitHub documentation for webhook payloads and events, the check_run event includes an action property that can take on values such as "completed", "created", "requested_action", and "rerequested". However, in the library, these fields are currently represented as free-form strings. In my opinion, making these enums would be more user-friendly.

Proposed Solution

A rudimentary example of how this can be done is as follows (go play ground link)

package main

import (
    "encoding/json"
    "fmt"
)

type ChecRunAction string

const (
    CheckRunCreated         ChecRunAction = "created"
    CheckRunRequested       ChecRunAction = "requested"
    CheckRunRerequested     ChecRunAction = "rerequested"
    CheckRunRequestedAction ChecRunAction = "requested_action"
)

func main() {
    jsonStr := `{"hi": "created"}`

    var v struct {
        A ChecRunAction `json:"hi"`
    }
    json.Unmarshal([]byte(jsonStr), &v)
    fmt.Println(v)
}
prnvbn commented 5 months ago

If you agree, I can make this change

gmlewis commented 5 months ago

That seems safe to me.

prnvbn commented 5 months ago

nice, will send a PR your way!

prnvbn commented 4 months ago

@gmlewis, please could you review the PR: https://github.com/google/go-github/pull/3136?