Resolve builds a Middleware instance and merges runtime-only fields (version, accepted content types, metadata key allowlist, mutation support) onto the spec. Return semantics: - (mw, mergedSpec, nil): instance built, include in chain. - (nil, spec, nil): id not registered; silently skip. - (nil, s
(spec Spec)
| 100 | // - (nil, spec, err): factory rejected the config (logged + counted |
| 101 | // by Manager, other middlewares still bind). |
| 102 | func (r *Resolver) Resolve(spec Spec) (Middleware, Spec, error) { |
| 103 | f := r.registry.Get(spec.ID) |
| 104 | if f == nil { |
| 105 | return nil, spec, nil |
| 106 | } |
| 107 | mw, err := f.New(spec.RawConfig) |
| 108 | if err != nil { |
| 109 | return nil, spec, fmt.Errorf("middleware %s factory: %w", spec.ID, err) |
| 110 | } |
| 111 | if mw.Slot() != spec.Slot { |
| 112 | _ = mw.Close() |
| 113 | return nil, spec, fmt.Errorf("middleware %s slot mismatch: spec=%d impl=%d", spec.ID, spec.Slot, mw.Slot()) |
| 114 | } |
| 115 | merged := spec |
| 116 | merged.Version = mw.Version() |
| 117 | merged.MetadataKeys = append([]string(nil), mw.MetadataKeys()...) |
| 118 | merged.AcceptedContentTypes = append([]string(nil), mw.AcceptedContentTypes()...) |
| 119 | merged.MutationsSupported = mw.MutationsSupported() |
| 120 | return mw, merged, nil |
| 121 | } |
no test coverage detected