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, pub cap_pcd_hash_list: Vec, pub deposit_pcd_hash_list: Vec, pub commitment_pcd_hash_list: Vec, 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, request_version: i64, request_process_hash: String, request_pcd_reference_hash: Option, request_item_reference_hash: Option, pcd_keys_role_confidential_list_enc_by_shared_secret: String, message_public: Option, message_confidential: Option, message_private: Option, 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, cap_pcd_hash_list: Vec, deposit_pcd_hash_list: Vec, commitment_pcd_hash_list: Vec, 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, message_shared_process_list: Vec, 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, ) } }