Improve Ownership Ergonomics of PromqlResult and Related Types #9
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.
Summary
The existing library API only provides immutable references to the internal data of the Promql query result. This may be good for encapsulation but it becomes very limiting when ownership of the data is required. In the current implementation, owning the data requires cloning it, which can be very expensive if the data is large.
This PR attempts to mitigate that by allowing the user of the library to own the internal types by explicitly calling the relevant
into_*
methods.Changes
as_variant
andis_variant
methods on theData
type have been removed. Instead, the EnumAsInner derive macro is used to generate the same methods automatically. Additionally this also adds theinto_variant
methods which allow user to own the internal types.PromqlResult
,InstantVector
, andRangeVector
implementinto_inner
methodSample
now implementsCopy