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