use crate::protocol::{Message, MsgTraceObjectsRequest, TraceObject};
use pallas_network::multiplexer;
use tracing::debug;
pub struct TraceAcceptorClient {
channel: multiplexer::ChannelBuffer,
}
impl TraceAcceptorClient {
pub fn new(channel: multiplexer::AgentChannel) -> Self {
Self {
channel: multiplexer::ChannelBuffer::new(channel),
}
}
pub async fn request_traces(
&mut self,
count: u16,
) -> Result<Vec<TraceObject>, multiplexer::Error> {
let req = Message::TraceObjectsRequest(MsgTraceObjectsRequest {
blocking: true,
number_of_trace_objects: count,
});
debug!("Sending trace request (count: {})", count);
self.channel.send_msg_chunks(&req).await?;
let msg: Message = self.channel.recv_full_msg().await?;
debug!("Received reply");
match msg {
Message::TraceObjectsReply(reply) => Ok(reply.trace_objects),
_ => Err(multiplexer::Error::Decoding(
"expected TraceObjectsReply".into(),
)),
}
}
pub async fn send_done(&mut self) -> Result<(), multiplexer::Error> {
self.channel.send_msg_chunks(&Message::Done).await
}
}