1package access23import (4 "encoding"5 "errors"6)78// AccessLevel is the level of access allowed to a repo.9type AccessLevel int // nolint: revive1011const (12 // NoAccess does not allow access to the repo.13 NoAccess AccessLevel = iota1415 // ReadOnlyAccess allows read-only access to the repo.16 ReadOnlyAccess1718 // ReadWriteAccess allows read and write access to the repo.19 ReadWriteAccess2021 // AdminAccess allows read, write, and admin access to the repo.22 AdminAccess23)2425// String returns the string representation of the access level.26func (a AccessLevel) String() string {27 switch a {28 case NoAccess:29 return "no-access"30 case ReadOnlyAccess:31 return "read-only"32 case ReadWriteAccess:33 return "read-write"34 case AdminAccess:35 return "admin-access"36 default:37 return "unknown"38 }39}4041// ParseAccessLevel parses an access level string.42func ParseAccessLevel(s string) AccessLevel {43 switch s {44 case "no-access":45 return NoAccess46 case "read-only":47 return ReadOnlyAccess48 case "read-write":49 return ReadWriteAccess50 case "admin-access":51 return AdminAccess52 default:53 return AccessLevel(-1)54 }55}5657var (58 _ encoding.TextMarshaler = AccessLevel(0)59 _ encoding.TextUnmarshaler = (*AccessLevel)(nil)60)6162// ErrInvalidAccessLevel is returned when an invalid access level is provided.63var ErrInvalidAccessLevel = errors.New("invalid access level")6465// UnmarshalText implements encoding.TextUnmarshaler.66func (a *AccessLevel) UnmarshalText(text []byte) error {67 l := ParseAccessLevel(string(text))68 if l < 0 {69 return ErrInvalidAccessLevel70 }7172 *a = l7374 return nil75}7677// MarshalText implements encoding.TextMarshaler.78func (a AccessLevel) MarshalText() (text []byte, err error) {79 return []byte(a.String()), nil80}