This adds support for encoding/decoding UUIDs as strings in the format described by RFC4122.
The encoding and decoding are done as efficiently as possible - on my machine UUIDs
In [1]: import msgspec, orjson, pydantic, uuid In [2]: class Struct(msgspec.Struct): ...: data: list[uuid.UUID] ...: In [3]: class Model(pydantic.BaseModel): ...: data: list[uuid.UUID] ...: In [4]: data = [uuid.uuid4() for _ in range(5000)] In [5]: struct = Struct(data=data) In [6]: model = Model(data=data) In [7]: enc = msgspec.json.Encoder() In [8]: dec = msgspec.json.Decoder(Struct) In [9]: msg = enc.encode(struct) In [10]: %timeit enc.encode(struct) # msgspec encode time 252 µs ± 4.32 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each) In [11]: %timeit orjson.dumps(data) # orjson encode time 537 µs ± 1.99 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each) In [12]: %timeit model.json() # pydantic encode time 18 ms ± 37.5 µs per loop (mean ± std. dev. of 7 runs, 100 loops each) In [13]: %timeit dec.decode(msg) # msgspec decode time 1.07 ms ± 4.45 µs per loop (mean ± std. dev. of 7 runs, 1,000 loops each) In [14]: %timeit Model.parse_raw(msg) # pydantic decode time 11.3 ms ± 115 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)