1// this file was auto-generated by internal/cmd/gentypes/main.go: DO NOT EDIT
2
3package jwa
4
5import (
6	"fmt"
7	"sort"
8	"sync"
9
10	"github.com/pkg/errors"
11)
12
13// CompressionAlgorithm represents the compression algorithms as described in https://tools.ietf.org/html/rfc7518#section-7.3
14type CompressionAlgorithm string
15
16// Supported values for CompressionAlgorithm
17const (
18	Deflate    CompressionAlgorithm = "DEF" // DEFLATE (RFC 1951)
19	NoCompress CompressionAlgorithm = ""    // No compression
20)
21
22var allCompressionAlgorithms = map[CompressionAlgorithm]struct{}{
23	Deflate:    {},
24	NoCompress: {},
25}
26
27var listCompressionAlgorithmOnce sync.Once
28var listCompressionAlgorithm []CompressionAlgorithm
29
30// CompressionAlgorithms returns a list of all available values for CompressionAlgorithm
31func CompressionAlgorithms() []CompressionAlgorithm {
32	listCompressionAlgorithmOnce.Do(func() {
33		listCompressionAlgorithm = make([]CompressionAlgorithm, 0, len(allCompressionAlgorithms))
34		for v := range allCompressionAlgorithms {
35			listCompressionAlgorithm = append(listCompressionAlgorithm, v)
36		}
37		sort.Slice(listCompressionAlgorithm, func(i, j int) bool {
38			return string(listCompressionAlgorithm[i]) < string(listCompressionAlgorithm[j])
39		})
40	})
41	return listCompressionAlgorithm
42}
43
44// Accept is used when conversion from values given by
45// outside sources (such as JSON payloads) is required
46func (v *CompressionAlgorithm) Accept(value interface{}) error {
47	var tmp CompressionAlgorithm
48	if x, ok := value.(CompressionAlgorithm); ok {
49		tmp = x
50	} else {
51		var s string
52		switch x := value.(type) {
53		case fmt.Stringer:
54			s = x.String()
55		case string:
56			s = x
57		default:
58			return errors.Errorf(`invalid type for jwa.CompressionAlgorithm: %T`, value)
59		}
60		tmp = CompressionAlgorithm(s)
61	}
62	if _, ok := allCompressionAlgorithms[tmp]; !ok {
63		return errors.Errorf(`invalid jwa.CompressionAlgorithm value`)
64	}
65
66	*v = tmp
67	return nil
68}
69
70// String returns the string representation of a CompressionAlgorithm
71func (v CompressionAlgorithm) String() string {
72	return string(v)
73}
74