Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We鈥檒l occasionally send you account related emails.

Already on GitHub? Sign in to your account

types: Implement generic encoder functions #170

Merged
merged 2 commits into from
Jun 11, 2024
Merged

Conversation

lukechampine
Copy link
Member

Adds EncodeSlice, EncodeSliceCast, EncodeSliceFn, and their decoder counterparts, as well as Cast methods for increased type safety. This makes most encoding methods more succinct, but the real motivation was that it allows us to centralized the handling of malicious slice lengths (see discussion on #166). I will grudgingly admit that generics solved a real problem here. 馃槤

I'm not crazy about the API; it would be nicer if we could somehow unify these three functions, and if we could ditch the Cast methods. I explored replacing EncodeSliceFn with a BasicEncodable type (wrapping uint64, bool, etc.), but it was kinda gross, requiring a run-time type-switch on every encode call.

I ran one manual benchmark to see whether this had a big performance impact, and it looked ok. We should benchmark it more thoroughly though.

types/encoding.go Show resolved Hide resolved
types/encoding_test.go Outdated Show resolved Hide resolved
@n8maninger n8maninger merged commit 36ea9c7 into master Jun 11, 2024
8 checks passed
@n8maninger n8maninger deleted the generic-encoder branch June 11, 2024 20:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
Development

Successfully merging this pull request may close these issues.

None yet

3 participants