From ed31c4201834719b2b75dca7cad1637abf1a80bb Mon Sep 17 00:00:00 2001 From: Silas Bartha Date: Sun, 2 Jun 2024 18:38:25 -0400 Subject: Made codecs object-safe and deal with bytes only --- src/codec.rs | 40 +++++++++++++++++++++------------------- 1 file changed, 21 insertions(+), 19 deletions(-) (limited to 'src/codec.rs') diff --git a/src/codec.rs b/src/codec.rs index 8b38a9b..11fa76e 100644 --- a/src/codec.rs +++ b/src/codec.rs @@ -1,26 +1,28 @@ +use thiserror::Error; + /// Codecs enable the concealment of payload data inside the data of a carrier. pub trait Codec { - /// Data type representing the carrier. - type Carrier; - - /// Data type representing the payload. - type Payload; - - /// Data type representing encoder output/decoder input (usually the same as the carrier). - type Output; - - /// Type of errors produced by this codec. - type Error; - /// Embeds payload data inside carrier, returning the result. - fn encode(&self, carrier: C, payload: P) -> Result - where - C: Into, - P: Into; + fn encode(&self, carrier: &[u8], payload: &[u8]) -> Result, CodecError>; /// Extracts payload data from an encoded carrier, returning the carrier with data removed and the /// payload data. - fn decode(&self, encoded: E) -> Result<(Self::Carrier, Self::Payload), Self::Error> - where - E: Into; + fn decode(&self, encoded: &[u8]) -> Result<(Vec, Vec), CodecError>; +} + +/// Errors produced by a codec +#[derive(Debug, Error)] +pub enum CodecError { + /// Variant used when data is determined not to be encoded. Note that a codec may have no way + /// of knowing this, so this may not be returned even if the data was not encoded + #[error("Data was not encoded with this codec")] + DataNotEncoded, + + /// Variant used when data is invalid in some way. Allows a message string for further context + #[error("Provided data invalid: {0}")] + DataInvalid(String), + + /// Variant used when some dependency, such as a file load, fails + #[error("Error occured in dependency: {0}")] + DependencyError(String), } -- cgit v1.2.3