...
1 package jwk
2
3 import "github.com/pkg/errors"
4
5 func (ops *KeyOperationList) Get() KeyOperationList {
6 if ops == nil {
7 return nil
8 }
9 return *ops
10 }
11
12 func (ops *KeyOperationList) Accept(v interface{}) error {
13 switch x := v.(type) {
14 case string:
15 return ops.Accept([]string{x})
16 case []interface{}:
17 l := make([]string, len(x))
18 for i, e := range x {
19 if es, ok := e.(string); ok {
20 l[i] = es
21 } else {
22 return errors.Errorf(`invalid list element type: expected string, got %T`, v)
23 }
24 }
25 return ops.Accept(l)
26 case []string:
27 list := make(KeyOperationList, len(x))
28 for i, e := range x {
29 switch e := KeyOperation(e); e {
30 case KeyOpSign, KeyOpVerify, KeyOpEncrypt, KeyOpDecrypt, KeyOpWrapKey, KeyOpUnwrapKey, KeyOpDeriveKey, KeyOpDeriveBits:
31 list[i] = e
32 default:
33 return errors.Errorf(`invalid keyoperation %v`, e)
34 }
35 }
36
37 *ops = list
38 return nil
39 case []KeyOperation:
40 list := make(KeyOperationList, len(x))
41 for i, e := range x {
42 switch e {
43 case KeyOpSign, KeyOpVerify, KeyOpEncrypt, KeyOpDecrypt, KeyOpWrapKey, KeyOpUnwrapKey, KeyOpDeriveKey, KeyOpDeriveBits:
44 list[i] = e
45 default:
46 return errors.Errorf(`invalid keyoperation %v`, e)
47 }
48 }
49
50 *ops = list
51 return nil
52 case KeyOperationList:
53 *ops = x
54 return nil
55 default:
56 return errors.Errorf(`invalid value %T`, v)
57 }
58 }
59
View as plain text