diff --git a/zvt/src/feig/sequences.rs b/zvt/src/feig/sequences.rs index 4a3d008..1c9580c 100644 --- a/zvt/src/feig/sequences.rs +++ b/zvt/src/feig/sequences.rs @@ -1,6 +1,6 @@ use crate::logging::PacketWriter; use crate::sequences::Sequence; -use crate::{packets, ZvtEnum, ZvtParser}; +use crate::{packets, ZvtEnum}; use anyhow::Result; use async_stream::try_stream; use std::boxed::Box; @@ -138,10 +138,7 @@ impl WriteFile { loop { // Get the data. - let bytes = src.read_packet().await?; - println!("The packet is {:?}", bytes); - - let response = WriteFileResponse::zvt_parse(&bytes)?; + let response = src.read_packet().await?; match response { WriteFileResponse::CompletionData(_) => { diff --git a/zvt/src/logging.rs b/zvt/src/logging.rs index 5b1cb6b..8275bdb 100644 --- a/zvt/src/logging.rs +++ b/zvt/src/logging.rs @@ -19,7 +19,11 @@ impl PacketWriter where S: AsyncReadExt + Unpin + Send, { - pub async fn read_packet(&mut self) -> Result> { + /// Reads an ADPU packet from the PT. + pub async fn read_packet(&mut self) -> Result + where + T: ZvtParser + Send, + { let mut buf = vec![0; 3]; self.source.read_exact(&mut buf).await?; @@ -38,7 +42,7 @@ where log::debug!("Read {:?}", buf); - Ok(buf.to_vec()) + Ok(T::zvt_parse(&buf)?) } } @@ -46,6 +50,7 @@ impl PacketWriter where S: AsyncWriteExt + Unpin + Send, { + /// Writes an ADPU packet to the PT. pub async fn write_packet<'a, T>(&mut self, msg: &T) -> Result<()> where T: ZvtSerializer + Sync + Send, @@ -64,6 +69,18 @@ impl PacketWriter where S: AsyncWriteExt + AsyncReadExt + Unpin + Send, { + /// Reads an ADPU packet from the PT and send an [packets::Ack]. + pub async fn read_packet_with_ack<'a, T>(&mut self) -> Result + where + T: ZvtParser + Send, + { + let packet = self.read_packet::().await?; + self.write_packet(&packets::Ack {}).await?; + + Ok(packet) + } + + /// Writes an ADPU packet to the PT and awaits its [packets::Ack]. pub async fn write_packet_with_ack<'a, T>(&mut self, msg: &T) -> Result<()> where T: ZvtSerializer + Sync + Send, @@ -71,8 +88,7 @@ where { self.write_packet(msg).await?; - let bytes = self.read_packet().await?; - let _ = Ack::zvt_parse(&bytes)?; + let _ = self.read_packet::().await?; Ok(()) } diff --git a/zvt/src/sequences.rs b/zvt/src/sequences.rs index 1812fce..f9a8217 100644 --- a/zvt/src/sequences.rs +++ b/zvt/src/sequences.rs @@ -42,8 +42,7 @@ where // This pin has nothing to do with the fact that we return a Stream // but is needed to access methods like `write_packet`. src.write_packet_with_ack(input).await?; - let bytes = src.read_packet().await?; - let packet = Self::Output::zvt_parse(&bytes)?; + let packet = src.read_packet().await?; // Write the response. src.write_packet::(&packets::Ack {}).await?; yield packet; @@ -99,8 +98,7 @@ impl Sequence for ReadCard { let s = try_stream! { src.write_packet_with_ack(input).await?; loop { - let bytes = src.read_packet().await?; - let packet = ReadCardResponse::zvt_parse(&bytes)?; + let packet = src.read_packet().await?; // Write the response. src.write_packet(&packets::Ack {}).await?; @@ -154,8 +152,7 @@ impl Sequence for Initialization { // 2.18.1 src.write_packet_with_ack(input).await?; loop { - let bytes = src.read_packet().await?; - let response = InitializationResponse::zvt_parse(&bytes)?; + let response = src.read_packet().await?; // Every message requires an Ack. src.write_packet(&packets::Ack {}).await?; @@ -260,8 +257,7 @@ impl Sequence for Diagnosis { // 2.18.1 src.write_packet_with_ack(input).await?; loop { - let bytes = src.read_packet().await?; - let response = DiagnosisResponse::zvt_parse(&bytes)?; + let response = src.read_packet().await?; // Every message requires an Ack. src.write_packet(&packets::Ack {}).await?; @@ -326,8 +322,7 @@ impl Sequence for EndOfDay { src.write_packet_with_ack(input).await?; loop { - let bytes = src.read_packet().await?; - let packet = EndOfDayResponse::zvt_parse(&bytes)?; + let packet = src.read_packet().await?; // Write the response. src.write_packet(&packets::Ack {}).await?; @@ -392,8 +387,7 @@ impl Sequence for Reservation { src.write_packet_with_ack(input).await?; loop { - let bytes = src.read_packet().await?; - let packet = AuthorizationResponse::zvt_parse(&bytes)?; + let packet = src.read_packet().await?; src.write_packet(&packets::Ack {}).await?; match packet { AuthorizationResponse::CompletionData(_) | AuthorizationResponse::Abort(_) => { @@ -461,8 +455,7 @@ impl Sequence for PartialReversal { src.write_packet_with_ack(input).await?; loop { - let bytes = src.read_packet().await?; - let packet = PartialReversalResponse::zvt_parse(&bytes)?; + let packet = src.read_packet().await?; src.write_packet(&packets::Ack {}).await?; match packet { PartialReversalResponse::CompletionData(_) @@ -500,8 +493,7 @@ impl Sequence for PreAuthReversal { src.write_packet_with_ack(input).await?; loop { - let bytes = src.read_packet().await?; - let packet = PartialReversalResponse::zvt_parse(&bytes)?; + let packet = src.read_packet().await?; src.write_packet(&packets::Ack {}).await?; match packet { PartialReversalResponse::CompletionData(_) @@ -550,8 +542,7 @@ impl Sequence for PrintSystemConfiguration { src.write_packet_with_ack(input).await?; loop { - let bytes = src.read_packet().await?; - let packet = PrintSystemConfigurationResponse::zvt_parse(&bytes)?; + let packet = src.read_packet().await?; src.write_packet(&packets::Ack {}).await?; match packet { PrintSystemConfigurationResponse::CompletionData(_) => { @@ -620,8 +611,7 @@ impl Sequence for StatusEnquiry { src.write_packet_with_ack(input).await?; loop { - let bytes = src.read_packet().await?; - let packet = StatusEnquiryResponse::zvt_parse(&bytes)?; + let packet = src.read_packet().await?; src.write_packet(&packets::Ack {}).await?; match packet { StatusEnquiryResponse::CompletionData(_) => {