use alloc::{fmt, vec::Vec};
use binary_sv2::{Deserialize, Seq064K, Serialize, Str0255, B0255, B064K, U256};
use core::convert::TryInto;
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
#[repr(C)]
pub struct DeclareMiningJob<'decoder> {
pub request_id: u32,
pub mining_job_token: B0255<'decoder>,
pub version: u32,
pub coinbase_tx_prefix: B064K<'decoder>,
pub coinbase_tx_suffix: B064K<'decoder>,
pub wtxid_list: Seq064K<'decoder, U256<'decoder>>,
pub excess_data: B064K<'decoder>,
}
impl fmt::Display for DeclareMiningJob<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"DeclareMiningJob(request_id: {}, mining_job_token: {}, version: 0x{:08x}, coinbase_tx_prefix: {}, coinbase_tx_suffix: {}, tx_ids_list: {}, excess_data: {})",
self.request_id,
self.mining_job_token.as_hex(),
self.version,
self.coinbase_tx_prefix,
self.coinbase_tx_suffix,
self.wtxid_list,
self.excess_data
)
}
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
#[repr(C)]
pub struct DeclareMiningJobSuccess<'decoder> {
pub request_id: u32,
pub new_mining_job_token: B0255<'decoder>,
}
impl fmt::Display for DeclareMiningJobSuccess<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"DeclareMiningJobSuccess(request_id: {}, new_mining_job_token: {})",
self.request_id,
self.new_mining_job_token.as_hex()
)
}
}
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq)]
#[repr(C)]
pub struct DeclareMiningJobError<'decoder> {
pub request_id: u32,
pub error_code: Str0255<'decoder>,
pub error_details: B064K<'decoder>,
}
impl fmt::Display for DeclareMiningJobError<'_> {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(
f,
"DeclareMiningJobError(request_id: {}, error_code: {}, error_details: {})",
self.request_id,
self.error_code.as_utf8_or_hex(),
self.error_details
)
}
}