sdk_common/src/models/request_prd_update.rs

128 lines
4.2 KiB
Rust

use std::{
collections::hash_map::DefaultHasher,
hash::{Hash, Hasher},
};
use super::{
key_encryption::KeyEncryption, message_client::MessageClient, request_prd::RequestPrd,
shared_peer::SharedPeer, shared_process::SharedProcess,
};
use serde::{Deserialize, Serialize};
#[derive(Debug, Serialize, Deserialize, Default, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)]
pub struct RequestPrdUpdate {
pub prd: RequestPrd,
pub pcd_new_version_hash: String,
pub payment_pcd_hash_list: Vec<String>,
pub cap_pcd_hash_list: Vec<String>,
pub deposit_pcd_hash_list: Vec<String>,
pub commitment_pcd_hash_list: Vec<String>,
pub ask_payment_method: String,
pub ask_deposit_method: String,
pub ask_commitment_method: String,
}
impl RequestPrdUpdate {
pub const TYPE: &'static str = "prd_update";
pub fn new(
request_item_name: Option<String>,
request_version: i64,
request_process_hash: String,
request_pcd_reference_hash: Option<String>,
request_item_reference_hash: Option<String>,
pcd_keys_role_confidential_list_enc_by_shared_secret: String,
message_public: Option<String>,
message_confidential: Option<String>,
message_private: Option<String>,
sp_address_to: String,
sp_address_from: String,
sp_address_reply: String,
timestamp_declared: u64,
role_name_from: String,
role_name_to: String,
pcd_new_version_hash: String,
payment_pcd_hash_list: Vec<String>,
cap_pcd_hash_list: Vec<String>,
deposit_pcd_hash_list: Vec<String>,
commitment_pcd_hash_list: Vec<String>,
ask_payment_method: String,
ask_deposit_method: String,
ask_commitment_method: String,
) -> Self {
let request_type = Self::TYPE.to_string();
let prd = RequestPrd::new(
request_item_name,
request_type,
request_version,
request_process_hash,
request_pcd_reference_hash,
request_item_reference_hash,
pcd_keys_role_confidential_list_enc_by_shared_secret,
message_public,
message_confidential,
message_private,
sp_address_to,
sp_address_from,
sp_address_reply,
timestamp_declared,
role_name_from,
role_name_to,
);
RequestPrdUpdate {
prd,
pcd_new_version_hash,
payment_pcd_hash_list,
cap_pcd_hash_list,
deposit_pcd_hash_list,
commitment_pcd_hash_list,
ask_payment_method,
ask_deposit_method,
ask_commitment_method,
}
}
pub fn to_message(
&self,
process_public_enc_key: KeyEncryption,
message_shared_peer_list: Vec<SharedPeer>,
message_shared_process_list: Vec<SharedProcess>,
message_faucet_sp_address: String,
pow_pathern: String,
pow_difficulty: usize,
) -> MessageClient {
let mut hasher: DefaultHasher = DefaultHasher::new();
self.hash(&mut hasher);
let request_hash = hasher.finish().to_string();
let request_enc: String = process_public_enc_key
.enc_prd_update(self.clone())
.to_string();
MessageClient::new(
request_enc,
request_hash,
message_shared_peer_list,
message_shared_process_list,
message_faucet_sp_address,
pow_pathern,
pow_difficulty,
)
}
// Fonction pour afficher ou retourner les informations
pub fn display_info(&self) -> String {
format!(
"PRD: {:?}, PCD New Version Hash: {}, Payment PCD Hash List: {:?}, Cap PCD Hash List: {:?}, Deposit PCD Hash List: {:?}, Commitment PCD Hash List: {:?}, Ask Payment Method: {}, Ask Deposit Method: {}, Ask Commitment Method: {}",
self.prd,
self.pcd_new_version_hash,
self.payment_pcd_hash_list,
self.cap_pcd_hash_list,
self.deposit_pcd_hash_list,
self.commitment_pcd_hash_list,
self.ask_payment_method,
self.ask_deposit_method,
self.ask_commitment_method,
)
}
}