jcrist / msgspec

A fast serialization and validation library, with builtin support for JSON, MessagePack, YAML, and TOML

Home Page:https://jcristharif.com/msgspec/

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Support adding hooks for supported objects types

mike0sv opened this issue · comments

Description

Right now, dec_hooks and enc_hooks are called only if msgspec encounters unknown type. I'd like a way to override dec/enc logic for specific supported types, but there is no way to do it rn. Possible solutions:

  1. add new argument with Dict[Type[T], Callable[[T], Any] that works even if T is subclass of Struct or any other supported type
  2. inspect argument type annotation for callables passed to dec_hooks and enc_hooks. If it is annotated with some type, use hook even if type supported natively
  3. introduce special (possibly dunder method) that can override default enc/dec logic. It can look something like this in python: decoded = if hasattr(obj.__class__, "__decode__") obj.__decode__(obj) else <native logic>. This will only work for Struct subclasses though

Linked: #669

we have the same problem.
msgspec json encoder supports a lot more types by default which sometimes isn't what we want(ex. sometimes we'd rather have serialization to fail rather than letting it pass and create an encoded data that we wouldn't know what type to decode it to by the time it gets to deserialization step).
and sometimes the way that msgspec json serializes certain supported types just isn't what we want.

both of these issues can be dealt with if there's a way to override behaviour for certain supported types.