Skip to content

Commit 4b7e68c

Browse files
committed
feat(toolkit): implement timeout parameter
1 parent 69843dd commit 4b7e68c

3 files changed

Lines changed: 16 additions & 4 deletions

File tree

toolkit/src/cli/arguments.rs

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,11 @@ pub(crate) struct TryDataRequest {
2929
help = "Whether to return the full execution trace, including partial results after each operator."
3030
)]
3131
pub full_trace: Option<bool>,
32+
#[structopt(
33+
long,
34+
help = "Maximum amount of seconds to wait for a data source to respond."
35+
)]
36+
pub timeout: Option<u64>,
3237
}
3338

3439
/// Easy derivation of `DecodeDataRequest` from `TryDataRequest`

toolkit/src/cli/data_requests.rs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
//! Implementations of CLI methods related to Witnet data requests.
22
3-
use std::{fs::File, io::Read, path::Path};
3+
use std::{fs::File, io::Read, path::Path, time::Duration};
44

55
use regex::Regex;
66

@@ -43,9 +43,13 @@ pub(crate) fn try_from_args(
4343
args: arguments::TryDataRequest,
4444
) -> Result<RADRequestExecutionReport, Error> {
4545
let full_trace = args.full_trace.unwrap_or(true);
46+
let timeout: Option<Duration> = if let Some(timeout) = args.timeout {
47+
Some(Duration::from_secs(timeout))
48+
} else {
49+
None
50+
};
4651
let request = decode_from_args(args.into())?.data_request;
47-
48-
witnet_toolkit::data_requests::try_data_request(&request, full_trace)
52+
witnet_toolkit::data_requests::try_data_request(&request, full_trace, timeout)
4953
}
5054

5155
/// Extract the Protocol Buffers representation of a data request from a Solidity smart contract

toolkit/src/data_requests.rs

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
//! Functions providing convenient utilities for working with Witnet data requests.
2+
use std::time::Duration;
3+
24
use witnet_data_structures::{
35
chain::{DataRequestOutput, RADRequest},
46
proto::ProtobufConvert,
@@ -46,13 +48,14 @@ pub fn decode_rad_from_pb_bytes(pb_bytes: &[u8]) -> Result<DataRequestOutput, Er
4648
pub fn try_data_request(
4749
request: &RADRequest,
4850
full_trace: bool,
51+
timeout: Option<Duration>,
4952
) -> Result<RADRequestExecutionReport, Error> {
5053
let settings = if full_trace {
5154
RadonScriptExecutionSettings::enable_all()
5255
} else {
5356
RadonScriptExecutionSettings::disable_all()
5457
};
55-
let report = witnet_rad::try_data_request(request, settings, None, None, false);
58+
let report = witnet_rad::try_data_request(request, settings, None, None, false, timeout);
5659

5760
Ok(report)
5861
}

0 commit comments

Comments
 (0)