partner_chains_smart_contracts_commands/
permissioned_candidates.rs1use crate::{GenesisUtxo, PaymentFilePath, option_to_json};
2use partner_chains_cardano_offchain::permissioned_candidates::upsert_permissioned_candidates;
3use std::fs::read_to_string;
4use std::str::FromStr;
5
6#[derive(Clone, Debug, clap::Parser)]
7pub struct UpsertPermissionedCandidatesCmd {
9 #[clap(flatten)]
10 common_arguments: crate::CommonArguments,
11 #[arg(long)]
12 permissioned_candidates_file: String,
16 #[clap(flatten)]
17 payment_key_file: PaymentFilePath,
19 #[clap(flatten)]
20 genesis_utxo: GenesisUtxo,
22}
23
24impl UpsertPermissionedCandidatesCmd {
25 pub async fn execute(self) -> crate::SubCmdResult {
27 let payment_key = self.payment_key_file.read_key()?;
28
29 let mut permissioned_candidates = Vec::new();
30
31 let file_content = read_to_string(&self.permissioned_candidates_file).map_err(|e| {
32 format!(
33 "Could not read permissioned candidates file '{}'. Cause: {e}",
34 &self.permissioned_candidates_file
35 )
36 })?;
37 for line in file_content.lines() {
38 if line.is_empty() {
39 continue;
40 }
41 let permissioned_candidate =
42 sidechain_domain::PermissionedCandidateData::from_str(line).map_err(|e| {
43 format!("Failed to parse permissioned candidate: '{}', because of {}", line, e)
44 })?;
45 permissioned_candidates.push(permissioned_candidate);
46 }
47
48 let client = self.common_arguments.get_ogmios_client().await?;
49
50 let result = upsert_permissioned_candidates(
51 self.genesis_utxo.into(),
52 &permissioned_candidates,
53 &payment_key,
54 &client,
55 &self.common_arguments.retries(),
56 )
57 .await?;
58 Ok(option_to_json(result))
59 }
60}