subtle_encoding/
identity.rs1use super::{
4 Encoding,
5 Error::{self, LengthInvalid},
6};
7
8#[derive(Copy, Clone, Debug, Default, Eq, Hash, PartialEq, PartialOrd, Ord)]
10pub struct Identity {}
11
12pub const IDENTITY: &Identity = &Identity {};
14
15impl Encoding for Identity {
16 fn encode_to_slice(&self, src: &[u8], dst: &mut [u8]) -> Result<usize, Error> {
17 ensure!(self.encoded_len(src) == dst.len(), LengthInvalid);
18 dst.copy_from_slice(src);
19 Ok(src.len())
20 }
21
22 fn encoded_len(&self, bytes: &[u8]) -> usize {
23 bytes.len()
24 }
25
26 fn decode_to_slice(&self, src: &[u8], dst: &mut [u8]) -> Result<usize, Error> {
27 ensure!(self.decoded_len(src)? == dst.len(), LengthInvalid);
28 dst.copy_from_slice(src);
29 Ok(src.len())
30 }
31
32 fn decoded_len(&self, bytes: &[u8]) -> Result<usize, Error> {
33 Ok(bytes.len())
34 }
35}
36
37#[cfg(feature = "alloc")]
39#[cfg(test)]
40mod tests {
41 use super::*;
42
43 const TEST_DATA: &[u8] = b"Testing 1, 2, 3...";
44
45 #[test]
46 fn test_encode() {
47 assert_eq!(IDENTITY.encode(TEST_DATA), TEST_DATA);
48 }
49
50 #[test]
51 fn test_decode() {
52 assert_eq!(IDENTITY.decode(TEST_DATA).unwrap(), TEST_DATA);
53 }
54}