File tree Expand file tree Collapse file tree 1 file changed +14
-9
lines changed Expand file tree Collapse file tree 1 file changed +14
-9
lines changed Original file line number Diff line number Diff line change @@ -194,16 +194,21 @@ impl Serialize for AsyncRecord {
194
194
} ;
195
195
let mut map_serializer = SerdeSerializer :: new ( serializer) ?;
196
196
let kv = self . kv . lock ( ) ;
197
- let message = format_args ! ( "{}" , self . msg) ;
198
- let record = Record :: new ( & rs, & message, BorrowedKV ( & ( * kv) ) ) ;
199
197
200
- self . logger_values
201
- . serialize ( & record, & mut map_serializer)
202
- . map_err ( |e| serde:: ser:: Error :: custom ( e) ) ?;
203
- record
204
- . kv ( )
205
- . serialize ( & record, & mut map_serializer)
206
- . map_err ( serde:: ser:: Error :: custom) ?;
198
+ // Convoluted pattern to avoid binding `format_args!` to a temporary.
199
+ // See: https://stackoverflow.com/questions/56304313/cannot-use-format-args-due-to-temporary-value-is-freed-at-the-end-of-this-state
200
+ let mut f = |msg : std:: fmt:: Arguments | {
201
+ let record = Record :: new ( & rs, & msg, BorrowedKV ( & ( * kv) ) ) ;
202
+ self . logger_values
203
+ . serialize ( & record, & mut map_serializer)
204
+ . map_err ( serde:: ser:: Error :: custom) ?;
205
+ record
206
+ . kv ( )
207
+ . serialize ( & record, & mut map_serializer)
208
+ . map_err ( serde:: ser:: Error :: custom)
209
+ } ;
210
+ f ( format_args ! ( "{}" , self . msg) ) ?;
211
+
207
212
map_serializer. end ( )
208
213
}
209
214
}
You can’t perform that action at this time.
0 commit comments