Skip to content

Commit 684db37

Browse files
committed
Remove nested await when possible
1 parent c336e36 commit 684db37

File tree

3 files changed

+67
-83
lines changed

3 files changed

+67
-83
lines changed

src/neon_builder.rs

Lines changed: 49 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -115,14 +115,14 @@ impl NeonBuilder {
115115
let (deferred, promise) = cx.promise();
116116

117117
rt.spawn(async move {
118-
let result = async {
119-
let mut builder = builder.lock().await;
120-
let mut resource_stream = resource.into_read_stream()?;
118+
let mut builder = builder.lock().await;
119+
120+
let result = resource.into_read_stream().and_then(|mut resource_stream| {
121121
builder.add_resource(&uri, &mut resource_stream)?;
122122
Ok(())
123-
}
124-
.await;
125-
deferred.settle_with(&channel, move |mut cx| match result {
123+
});
124+
125+
deferred.settle_with(&channel, |mut cx| match result {
126126
Ok(_) => Ok(cx.undefined()),
127127
Err(err) => as_js_error(&mut cx, err).and_then(|err| cx.throw(err)),
128128
});
@@ -145,23 +145,21 @@ impl NeonBuilder {
145145
let (deferred, promise) = cx.promise();
146146

147147
rt.spawn(async move {
148-
let result = async {
149-
let mut builder = builder.lock().await;
150-
let format = ingredient
151-
.mime_type()
152-
.ok_or_else(|| {
153-
Error::Signing("Ingredient asset must have a mime type".to_string())
154-
})?
155-
.to_owned();
156-
let mut ingredient_stream = ingredient.into_read_stream()?;
157-
builder.add_ingredient_from_stream(
158-
&ingredient_json,
159-
&format,
160-
&mut ingredient_stream,
161-
)?;
162-
Ok(())
163-
}
164-
.await;
148+
let mut builder = builder.lock().await;
149+
150+
let result = ingredient
151+
.mime_type()
152+
.ok_or_else(|| Error::Signing("Ingredient asset must have a mime type".to_string()))
153+
.and_then(|format| {
154+
let mut ingredient_stream = ingredient.into_read_stream()?;
155+
builder.add_ingredient_from_stream(
156+
&ingredient_json,
157+
&format,
158+
&mut ingredient_stream,
159+
)?;
160+
Ok(())
161+
});
162+
165163
deferred.settle_with(&channel, move |mut cx| match result {
166164
Ok(_) => Ok(cx.undefined()),
167165
Err(err) => as_js_error(&mut cx, err).and_then(|err| cx.throw(err)),
@@ -183,13 +181,12 @@ impl NeonBuilder {
183181
let (deferred, promise) = cx.promise();
184182

185183
rt.spawn(async move {
186-
let result = async {
187-
let mut builder = builder.lock().await;
188-
let dest_stream = dest.write_stream()?;
184+
let mut builder = builder.lock().await;
185+
let result = dest.write_stream().and_then(|dest_stream| {
189186
builder.to_archive(dest_stream)?;
190187
Ok(())
191-
}
192-
.await;
188+
});
189+
193190
deferred.settle_with(&channel, move |mut cx| match result {
194191
Ok(_) => Ok(cx.undefined()),
195192
Err(err) => as_js_error(&mut cx, err).and_then(|err| cx.throw(err)),
@@ -208,12 +205,11 @@ impl NeonBuilder {
208205
let (deferred, promise) = cx.promise();
209206

210207
rt.spawn(async move {
211-
let result = async {
212-
let source_stream = source.into_read_stream()?;
208+
let result = source.into_read_stream().and_then(|source_stream| {
213209
let builder = Builder::from_archive(source_stream)?;
214210
Ok(builder)
215-
}
216-
.await;
211+
});
212+
217213
deferred.settle_with(&channel, move |mut cx| match result {
218214
Ok(builder) => Ok(cx.boxed(Self {
219215
builder: Arc::new(Mutex::new(builder)),
@@ -300,14 +296,12 @@ impl NeonBuilder {
300296
let builder = Arc::clone(&this.builder);
301297
let (deferred, promise) = cx.promise();
302298
rt.spawn(async move {
303-
let result = async {
304-
let mut builder = builder.lock().await;
305-
let sign_result = builder
306-
.sign_async(&signer, &format, &mut input_stream, &mut output_stream)
307-
.await?;
308-
Ok::<_, Error>((sign_result, output_stream))
309-
}
310-
.await;
299+
let result = builder
300+
.lock()
301+
.await
302+
.sign_async(&signer, &format, &mut input_stream, &mut output_stream)
303+
.await
304+
.map(|sign_result| (sign_result, output_stream));
311305

312306
deferred.settle_with(&channel, move |mut cx| match result {
313307
Ok((signed_bytes, mut output_stream)) => {
@@ -321,9 +315,7 @@ impl NeonBuilder {
321315
}
322316
match output_stream.read_to_end(&mut buffer) {
323317
Ok(_) => (),
324-
Err(e) => {
325-
return cx.throw_error(format!("Failed to read stream: {e}"))
326-
}
318+
Err(e) => return cx.throw_error(format!("Failed to read stream: {e}")),
327319
}
328320
Some(buffer)
329321
} else {
@@ -375,14 +367,12 @@ impl NeonBuilder {
375367
let builder = Arc::clone(&this.builder);
376368
let (deferred, promise) = cx.promise();
377369
rt.spawn(async move {
378-
let result = async {
379-
let mut builder = builder.lock().await;
380-
let sign_result = builder
381-
.sign_async(&signer, &format, &mut input_stream, &mut output_stream)
382-
.await?;
383-
Ok::<_, Error>((sign_result, output_stream))
384-
}
385-
.await;
370+
let result = builder
371+
.lock()
372+
.await
373+
.sign_async(&signer, &format, &mut input_stream, &mut output_stream)
374+
.await
375+
.map(|sign_result| (sign_result, output_stream));
386376

387377
deferred.settle_with(&channel, move |mut cx| match result {
388378
Ok((signed_bytes, mut output_stream)) => {
@@ -396,9 +386,7 @@ impl NeonBuilder {
396386
}
397387
match output_stream.read_to_end(&mut buffer) {
398388
Ok(_) => (),
399-
Err(e) => {
400-
return cx.throw_error(format!("Failed to read stream: {e}"))
401-
}
389+
Err(e) => return cx.throw_error(format!("Failed to read stream: {e}")),
402390
}
403391
Some(buffer)
404392
} else {
@@ -451,14 +439,12 @@ impl NeonBuilder {
451439
let (deferred, promise) = cx.promise();
452440

453441
rt.spawn(async move {
454-
let result = async {
455-
let mut builder = builder.lock().await;
456-
let sign_result = builder
457-
.sign_async(&signer, &format, &mut input_stream, &mut output_stream)
458-
.await?;
459-
Ok::<_, Error>((sign_result, output_stream))
460-
}
461-
.await;
442+
let result = builder
443+
.lock()
444+
.await
445+
.sign_async(&signer, &format, &mut input_stream, &mut output_stream)
446+
.await
447+
.map(|sign_result| (sign_result, output_stream));
462448

463449
deferred.settle_with(&channel, move |mut cx| match result {
464450
Ok((signed_bytes, mut output_stream)) => {
@@ -472,9 +458,7 @@ impl NeonBuilder {
472458
}
473459
match output_stream.read_to_end(&mut buffer) {
474460
Ok(_) => (),
475-
Err(e) => {
476-
return cx.throw_error(format!("Failed to read stream: {e}"))
477-
}
461+
Err(e) => return cx.throw_error(format!("Failed to read stream: {e}")),
478462
}
479463
Some(buffer)
480464
} else {

src/neon_reader.rs

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -136,14 +136,13 @@ impl NeonReader {
136136

137137
let (deferred, promise) = cx.promise();
138138
rt.spawn(async move {
139-
let result = async {
140-
let reader = reader.lock().await;
141-
let bytes_written = reader
142-
.resource_to_stream(&uri, &mut output_stream)
143-
.map_err(Error::from)?;
144-
Ok::<_, Error>((bytes_written, output_stream))
145-
}
146-
.await;
139+
let result = reader
140+
.lock()
141+
.await
142+
.resource_to_stream(&uri, &mut output_stream)
143+
.map(|bytes_written| (bytes_written, output_stream))
144+
.map_err(Error::from);
145+
147146
deferred.settle_with(&channel, move |mut cx| match result {
148147
Ok((bytes_written, mut output_stream)) => {
149148
let buffer = if output.name() == "destination_buffer" {
@@ -181,12 +180,13 @@ impl NeonReader {
181180
let (deferred, promise) = cx.promise();
182181

183182
rt.spawn(async move {
184-
let result = async {
185-
let mut reader = reader.lock().await;
186-
reader.post_validate_async(&CawgValidator {}).await?;
187-
Ok(())
188-
}
189-
.await;
183+
let result = reader
184+
.lock()
185+
.await
186+
.post_validate_async(&CawgValidator {})
187+
.await
188+
.map_err(Error::from);
189+
190190
deferred.settle_with(&channel, move |mut cx| match result {
191191
Ok(_) => Ok(cx.undefined()),
192192
Err(err) => as_js_error(&mut cx, err).and_then(|err| cx.throw(err)),

src/neon_signer.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -208,10 +208,10 @@ impl NeonCallbackSigner {
208208

209209
rt.spawn(async move {
210210
let signer = NeonCallbackSigner::new(channel.clone(), callback, config);
211-
let result = match <Self as AsyncSigner>::sign(&signer, data).await {
212-
Ok(sig) => Ok(sig),
213-
Err(e) => Err(e.to_string()),
214-
};
211+
let result = <Self as AsyncSigner>::sign(&signer, data)
212+
.await
213+
.map_err(|e| e.to_string());
214+
215215
deferred.settle_with(&channel, move |mut cx| match result {
216216
Ok(signature) => {
217217
let buffer = JsBuffer::from_slice(&mut cx, &signature)?;

0 commit comments

Comments
 (0)