NewMasterKeys fetches each non-nil tier and joins per-tier errors. A retriever returning (nil, nil) means "tier not applicable" and contributes no key. Never logs — the caller decides severity.
(r Retrievers, hints Hints)
| 27 | // NewMasterKeys fetches each non-nil tier and joins per-tier errors. A retriever returning (nil, nil) |
| 28 | // means "tier not applicable" and contributes no key. Never logs — the caller decides severity. |
| 29 | func NewMasterKeys(r Retrievers, hints Hints) (MasterKeys, error) { |
| 30 | var keys MasterKeys |
| 31 | var errs []error |
| 32 | |
| 33 | for _, t := range []struct { |
| 34 | name string |
| 35 | r Retriever |
| 36 | dst *[]byte |
| 37 | }{ |
| 38 | {"v10", r.V10, &keys.V10}, |
| 39 | {"v11", r.V11, &keys.V11}, |
| 40 | {"v20", r.V20, &keys.V20}, |
| 41 | } { |
| 42 | if t.r == nil { |
| 43 | continue |
| 44 | } |
| 45 | k, err := t.r.RetrieveKey(hints) |
| 46 | if err != nil { |
| 47 | errs = append(errs, fmt.Errorf("%s: %w", t.name, err)) |
| 48 | continue |
| 49 | } |
| 50 | *t.dst = k |
| 51 | } |
| 52 | return keys, errors.Join(errs...) |
| 53 | } |