Skip to content

Commit c037a57

Browse files
authored
perf(payload): move fields instead of cloning in PayloadBuilderStack::try_build (#19998)
1 parent 1e4b15b commit c037a57

File tree

1 file changed

+14
-19
lines changed

1 file changed

+14
-19
lines changed

crates/payload/basic/src/stack.rs

Lines changed: 14 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -194,43 +194,38 @@ where
194194
&self,
195195
args: BuildArguments<Self::Attributes, Self::BuiltPayload>,
196196
) -> Result<BuildOutcome<Self::BuiltPayload>, PayloadBuilderError> {
197-
match args.config.attributes {
198-
Either::Left(ref left_attr) => {
197+
let BuildArguments { cached_reads, config, cancel, best_payload } = args;
198+
let PayloadConfig { parent_header, attributes } = config;
199+
200+
match attributes {
201+
Either::Left(left_attr) => {
199202
let left_args: BuildArguments<L::Attributes, L::BuiltPayload> = BuildArguments {
200-
cached_reads: args.cached_reads.clone(),
201-
config: PayloadConfig {
202-
parent_header: args.config.parent_header.clone(),
203-
attributes: left_attr.clone(),
204-
},
205-
cancel: args.cancel.clone(),
206-
best_payload: args.best_payload.clone().and_then(|payload| {
203+
cached_reads,
204+
config: PayloadConfig { parent_header, attributes: left_attr },
205+
cancel,
206+
best_payload: best_payload.and_then(|payload| {
207207
if let Either::Left(p) = payload {
208208
Some(p)
209209
} else {
210210
None
211211
}
212212
}),
213213
};
214-
215214
self.left.try_build(left_args).map(|out| out.map_payload(Either::Left))
216215
}
217-
Either::Right(ref right_attr) => {
216+
Either::Right(right_attr) => {
218217
let right_args = BuildArguments {
219-
cached_reads: args.cached_reads.clone(),
220-
config: PayloadConfig {
221-
parent_header: args.config.parent_header.clone(),
222-
attributes: right_attr.clone(),
223-
},
224-
cancel: args.cancel.clone(),
225-
best_payload: args.best_payload.clone().and_then(|payload| {
218+
cached_reads,
219+
config: PayloadConfig { parent_header, attributes: right_attr },
220+
cancel,
221+
best_payload: best_payload.and_then(|payload| {
226222
if let Either::Right(p) = payload {
227223
Some(p)
228224
} else {
229225
None
230226
}
231227
}),
232228
};
233-
234229
self.right.try_build(right_args).map(|out| out.map_payload(Either::Right))
235230
}
236231
}

0 commit comments

Comments
 (0)