1package webhook23import (4 "encoding"5 "errors"6)78// Event is a webhook event.9type Event int1011const (12 // EventBranchTagCreate is a branch or tag create event.13 EventBranchTagCreate Event = 11415 // EventBranchTagDelete is a branch or tag delete event.16 EventBranchTagDelete Event = 21718 // EventCollaborator is a collaborator change event.19 EventCollaborator Event = 32021 // EventPush is a push event.22 EventPush Event = 42324 // EventRepository is a repository create, delete, rename event.25 EventRepository Event = 52627 // EventRepositoryVisibilityChange is a repository visibility change event.28 EventRepositoryVisibilityChange Event = 629)3031// Events return all events.32func Events() []Event {33 return []Event{34 EventBranchTagCreate,35 EventBranchTagDelete,36 EventCollaborator,37 EventPush,38 EventRepository,39 EventRepositoryVisibilityChange,40 }41}4243var eventStrings = map[Event]string{44 EventBranchTagCreate: "branch_tag_create",45 EventBranchTagDelete: "branch_tag_delete",46 EventCollaborator: "collaborator",47 EventPush: "push",48 EventRepository: "repository",49 EventRepositoryVisibilityChange: "repository_visibility_change",50}5152// String returns the string representation of the event.53func (e Event) String() string {54 return eventStrings[e]55}5657var stringEvent = map[string]Event{58 "branch_tag_create": EventBranchTagCreate,59 "branch_tag_delete": EventBranchTagDelete,60 "collaborator": EventCollaborator,61 "push": EventPush,62 "repository": EventRepository,63 "repository_visibility_change": EventRepositoryVisibilityChange,64}6566// ErrInvalidEvent is returned when the event is invalid.67var ErrInvalidEvent = errors.New("invalid event")6869// ParseEvent parses an event string and returns the event.70func ParseEvent(s string) (Event, error) {71 e, ok := stringEvent[s]72 if !ok {73 return -1, ErrInvalidEvent74 }7576 return e, nil77}7879var (80 _ encoding.TextMarshaler = Event(0)81 _ encoding.TextUnmarshaler = (*Event)(nil)82)8384// UnmarshalText implements encoding.TextUnmarshaler.85func (e *Event) UnmarshalText(text []byte) error {86 ev, err := ParseEvent(string(text))87 if err != nil {88 return err89 }9091 *e = ev92 return nil93}9495// MarshalText implements encoding.TextMarshaler.96func (e Event) MarshalText() (text []byte, err error) {97 ev := e.String()98 if ev == "" {99 return nil, ErrInvalidEvent100 }101102 return []byte(ev), nil103}