> The problem is that you need to replicate the struct entries in the pack/unpack calls as well
Don't you only need the (generated) format string? Ideally, the macro could generate some wrapper function of some sort as well, which would unpack, fill and return an instance of the struct.
It might be possible to construct a macro that creates both the struct and the format string, though.