use zcash_primitives::transaction::TxId;
use zcash_protocol::consensus::BlockHeight;
#[derive(Clone, Debug, PartialEq, Eq)]
pub enum TransmissionRoute {
Nakednet {
endpoint: String,
},
Mixnet {
destination: String,
via_socks5: String,
},
}
impl TransmissionRoute {
pub fn is_mixnet(&self) -> bool {
matches!(self, TransmissionRoute::Mixnet { .. })
}
}
#[derive(Clone, Debug, PartialEq, Eq)]
pub struct TransmissionReceipt {
pub txid: TxId,
pub route: TransmissionRoute,
}
pub trait TransmissionClient: Send + Sync {
fn submit(
&self,
raw_tx: Vec<u8>,
expiry_height: BlockHeight,
) -> impl std::future::Future<Output = Result<TransmissionReceipt, PartTransmissionError>> + Send;
}
#[derive(Debug, thiserror::Error)]
pub enum PartTransmissionError {
#[error("transmission transport failure: {0}")]
Transport(String),
#[error("transmission rejected: {0}")]
Rejected(String),
}