package oauth import ( "encoding/json" "fmt" "strings" ) //go:generate stringer -type=Provider type Provider int const ( Unknown Provider = iota Credentials Google GitHub Linkedin Mock ) // UnmarshalJSON implements json.Unmarshaler so Provider accepts string in JSON (e.g. "mock", "google") func (p *Provider) UnmarshalJSON(data []byte) error { var s string if err := json.Unmarshal(data, &s); err != nil { return err } parsed, err := ParseProvider(s) if err != nil { return err } *p = parsed return nil } // ParseProvider parses a provider string and returns the corresponding Provider enum func ParseProvider(provider string) (Provider, error) { switch strings.ToLower(provider) { case "credentials": return Credentials, nil case "google": return Google, nil case "github": return GitHub, nil case "linkedin": return Linkedin, nil case "mock": return Mock, nil default: return Unknown, fmt.Errorf("unknown provider: %s", provider) } }