simd-json-derive icon indicating copy to clipboard operation
simd-json-derive copied to clipboard

inline sub type start

Open Licenser opened this issue 5 years ago • 0 comments

If we have a type that includes another datatype and so on, we still have a write command for each type even so at compile time we would know the entire 'chain'

an example would be:

struct S1 {
  v: Vec<u8>
}
struct S2 {
  s1: S1
}
struct S3 {
  s2: S2
}

serializing S3 would write {"s2": then {"s1": then {"v": then [ and only then the data.

A human observer will notice that we could reduce this to a single call of {"s2":{"s1":{"v":[.

At the same time we can notice that we do the same on the 'tail' where we will write ] then } then } then }.

A human observer, again, will notice that we could reduce this to a single call of ]}}}.

The same logic can be applied to combining <key>:{ and }, for keys that are neither first nor last to reduce write calls further.

An initial though is to split the encoding out into 3 sections:

  1. static start
  2. body
  3. static end

where 1 and 3 take the form of fn static_*() -> &'static u8 so the proc macro can call them on underlying structs to inline those parts of a sub type.

Licenser avatar Apr 18 '20 21:04 Licenser