refactor: libtransmission::serializer redesign #7954
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
This is a followup to bf48ead with several goals.
Naming simplification:
libtransmission::serializer.serializer.hConverters.Convertersnow has container-like concepts to make it Just Work when a user tries to convert containers of T, e.g.std::vector<T>,std::set<T>,QStringList,small:vector<T>, etc.Fieldsare now stored in astd::tupleinstead of astd::array. This has two important benefits:Fieldsare smaller and can be made constexpr / constevalRemoved use of the CRTP. You can now serialize any struct without having to subclass
Serializable.Added a new suite of unit tests for both
Convertersand for settings serialization.I love the featureset and now it does everything that I need; but on the other hand, this was a lot of work and is on the very edge of how much C++ metaprogramming I'm comfortable with using in production code. I hope to not have to touch this code again for awhile.