Skip to content

inline sub type start #1

@Licenser

Description

@Licenser

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.

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions