cargo_tangle/command/list/
requests.rs1use color_eyre::Result;
2use dialoguer::console::style;
3use blueprint_clients::tangle::client::OnlineClient;
4use tangle_subxt::subxt::utils::AccountId32;
5use tangle_subxt::tangle_testnet_runtime::api::runtime_types::tangle_primitives::services::service::ServiceRequest;
6
7pub async fn list_requests(
28 ws_rpc_url: String,
29) -> Result<Vec<(u64, ServiceRequest<AccountId32, u64, u128>)>> {
30 let client = OnlineClient::from_url(ws_rpc_url.clone()).await?;
31
32 let service_requests_addr = tangle_subxt::tangle_testnet_runtime::api::storage()
33 .services()
34 .service_requests_iter();
35
36 println!("{}", style("Fetching service requests...").cyan());
37 let mut storage_query = client
38 .storage()
39 .at_latest()
40 .await?
41 .iter(service_requests_addr)
42 .await?;
43
44 let mut requests = Vec::new();
45
46 while let Some(result) = storage_query.next().await {
47 let result = result?;
48 let request = result.value;
49 let id = u64::from_le_bytes(
50 result.key_bytes[32..]
51 .try_into()
52 .expect("Invalid key bytes format"),
53 );
54 requests.push((id, request));
55 }
56
57 println!(
58 "{}",
59 style(format!("Found {} service requests", requests.len())).green()
60 );
61 Ok(requests)
62}
63
64pub fn print_requests(requests: Vec<(u64, ServiceRequest<AccountId32, u64, u128>)>) {
70 if requests.is_empty() {
71 println!("{}", style("No service requests found").yellow());
72 return;
73 }
74
75 println!("\n{}", style("Service Requests").cyan().bold());
76 println!(
77 "{}",
78 style("=============================================").dim()
79 );
80
81 for (request_id, request) in requests {
82 println!(
83 "{}: {}",
84 style("Request ID").green().bold(),
85 style(request_id).green()
86 );
87 println!("{}: {}", style("Blueprint ID").green(), request.blueprint);
88 println!("{}: {}", style("Owner").green(), request.owner);
89 println!(
90 "{}: {:?}",
91 style("Permitted Callers").green(),
92 request.permitted_callers
93 );
94 println!(
95 "{}: {:?}",
96 style("Security Requirements").green(),
97 request.security_requirements
98 );
99 println!(
100 "{}: {:?}",
101 style("Membership Model").green(),
102 request.membership_model
103 );
104 println!("{}: {:?}", style("Request Arguments").green(), request.args);
105 println!("{}: {:?}", style("TTL").green(), request.ttl);
106 println!(
107 "{}",
108 style("=============================================").dim()
109 );
110 }
111}