Serde ripoff with support for async

has anyone made a serde ripoff with support for async? it'd be really nice to be able to context switch between multiple serde contexts.

serde-transcode is cool and all but what if you could serde-transmute. but that's not really possible without async.

As far as I know, the best option for this is to use serde on Vec<u8>. You can read the data into a Vec<u8> using async IO, then you can call the serde methods on the Vec<u8> to parse the data. Similarly, you can serialize values in an Vec<u8>, then write the bytes using async IO.


If you need to support partial data, nom has streaming support which can handle byte streams that arrive piecemeal.

so the main thing we'd like to have is serde_transmute with optional borrowing and no-std.

we can't make it work with no-std because we can't context-switch from a Serialize(r) to a Deserialize(r).

when serializing a struct you have

let x = serializer.serialize_struct(name, n);
x.serialize_field(key, &foo);
x.serialize_field(key, &bar);

but when deserializing you have like




and we can't "pipe" the serialize_field straight into next_entry without async.

indeed we can't even switch between them at boundaries, instead having to serialize the whole Serialize before even touching the Deserialize. it's such a waste because it prevents applying ignored_any to the Serialize.