master
go 57 lines 1.09 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 package cloudauth
4
5 import (
6 "encoding/json"
7 "strings"
8 )
9
10 type Provider string
11
12 const (
13 ProviderNone Provider = "none"
14 ProviderAzureAD Provider = "azure_ad"
15 )
16
17 func (p Provider) Normalized() Provider {
18 return normalizeProviderValue(p)
19 }
20
21 func (p Provider) MarshalJSON() ([]byte, error) {
22 return json.Marshal(p.marshalValue())
23 }
24
25 func (p *Provider) UnmarshalJSON(data []byte) error {
26 var raw string
27 if err := json.Unmarshal(data, &raw); err != nil {
28 return err
29 }
30 *p = normalizeProviderValue(Provider(raw))
31 return nil
32 }
33
34 func (p Provider) MarshalYAML() (any, error) {
35 return p.marshalValue(), nil
36 }
37
38 func (p *Provider) UnmarshalYAML(unmarshal func(any) error) error {
39 var raw string
40 if err := unmarshal(&raw); err != nil {
41 return err
42 }
43 *p = normalizeProviderValue(Provider(raw))
44 return nil
45 }
46
47 func (p Provider) marshalValue() string {
48 return string(p.Normalized())
49 }
50
51 func normalizeProviderValue(provider Provider) Provider {
52 p := strings.ToLower(strings.TrimSpace(string(provider)))
53 if p == "" {
54 return ProviderNone
55 }
56 return Provider(p)
57 }