diff options
Diffstat (limited to 'src/codec.rs')
-rw-r--r-- | src/codec.rs | 40 |
1 files changed, 21 insertions, 19 deletions
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<C, P>(&self, carrier: C, payload: P) -> Result<Self::Output, Self::Error> - where - C: Into<Self::Carrier>, - P: Into<Self::Payload>; + fn encode(&self, carrier: &[u8], payload: &[u8]) -> Result<Vec<u8>, CodecError>; /// Extracts payload data from an encoded carrier, returning the carrier with data removed and the /// payload data. - fn decode<E>(&self, encoded: E) -> Result<(Self::Carrier, Self::Payload), Self::Error> - where - E: Into<Self::Output>; + fn decode(&self, encoded: &[u8]) -> Result<(Vec<u8>, Vec<u8>), 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), } |