perf: keep sse.Register and convenience generic parts small - #1117
Merged
Merged
Conversation
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #1117 +/- ##
==========================================
+ Coverage 93.17% 93.18% +0.01%
==========================================
Files 24 24
Lines 4997 5005 +8
==========================================
+ Hits 4656 4664 +8
Misses 273 273
Partials 68 68 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Follow-up to #1115. Go compiles a separate copy of a generic function body for each distinct type layout, so the remaining per-operation generics still duplicated code that never touches their type parameters.
sse.Register[I]: schema building moved intoaddEventStreamResponse, response streaming intostreamResponse, andstreamis no longer generic (it takes arun(ctx, send)closure). Only thehuma.Registercall and the closure overinput/fremain generic.convenience[I, O](behindhuma.Get,Post, etc.): operation building moved intoconvenienceOperation. The typed nil*Ois still passed through for the ID/summary generators and_convenience_*_outmetadata used by groups.No public API or behaviour changes.
Numbers
Probe program with 20
huma.Get+ 20sse.Registeroperations, each with distinct types:Roughly 5.7 KB saved per SSE operation and 1 KB per convenience operation. The remainder is mostly the
Registershim from #1115.