feat: add TypedMessageHandler + generic Decode[T] helper
Some checks failed
CI / Lint (pull_request) Failing after 1m25s
CI / Test (pull_request) Failing after 1m25s
CI / Release (pull_request) Has been skipped
CI / Notify (pull_request) Successful in 1s

- handler: add OnTypedMessage() for typed NATS message callbacks
  Avoids double-decode (msgpack→map→typed) by skipping map step
- handler: refactor wrapHandler into wrapTypedHandler + wrapMapHandler
- natsutil: add generic Decode[T](data) for direct msgpack→struct decode
- tests: add typed handler tests + benchmark (11 tests pass)
This commit is contained in:
2026-02-20 07:10:33 -05:00
parent 35912d5844
commit ea9b3a8f2b
3 changed files with 169 additions and 6 deletions

View File

@@ -124,6 +124,14 @@ func DecodeMsgpack(msg *nats.Msg, dest any) error {
return msgpack.Unmarshal(msg.Data, dest)
}
// Decode is a generic helper that unmarshals msgpack bytes into T.
// Usage: req, err := natsutil.Decode[messages.ChatRequest](msg.Data)
func Decode[T any](data []byte) (T, error) {
var v T
err := msgpack.Unmarshal(data, &v)
return v, err
}
// DecodeMsgpackMap decodes msgpack data into a generic map.
func DecodeMsgpackMap(data []byte) (map[string]any, error) {
var m map[string]any