subscriber: fix accessing the field formatter from FmtContext
#1082
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 backports PR #1081 from v0.2.x. Since this has already been approved
on master, I'll just go ahead and merge it when CI passes.
Motivation
Currently, the
FmtContext
type implementsFormatFields
using thesubscriber's field formatter. However, this is difficult to use. The
FmtContext
may not be passed to functions expecting afor<'writer> FormatFields<'writer>
, because it only implementsFormatFields
forits own lifetime. This means the writer must have the same lifetime as
the context, which is not correct.
Solution
This branch fixes this by changing the impl of
FormatFields
forFmtContext
to be generic over both the context's lifetime and thefield formatter's lifetime. Additionally, I've added a method for
borrowing the actual field formatter as its concrete type, in case the
FormatEvent
impl puts additional constraints on its type or is onlyimplemented for a specific named type, and wants to actually use that
type.