...
1
2
3 package jwa
4
5 import (
6 "fmt"
7 "sort"
8 "sync"
9
10 "github.com/pkg/errors"
11 )
12
13
14 type CompressionAlgorithm string
15
16
17 const (
18 Deflate CompressionAlgorithm = "DEF"
19 NoCompress CompressionAlgorithm = ""
20 )
21
22 var allCompressionAlgorithms = map[CompressionAlgorithm]struct{}{
23 Deflate: {},
24 NoCompress: {},
25 }
26
27 var listCompressionAlgorithmOnce sync.Once
28 var listCompressionAlgorithm []CompressionAlgorithm
29
30
31 func 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
45
46 func (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
71 func (v CompressionAlgorithm) String() string {
72 return string(v)
73 }
74
View as plain text