ps_ecc/reed_solomon/methods/
encode.rs1use ps_buffer::Buffer;
2
3use crate::error::RSEncodeError;
4use crate::ReedSolomon;
5
6impl ReedSolomon {
7 pub fn encode(&self, message: &[u8]) -> Result<Buffer, RSEncodeError> {
12 let mut buffer = Buffer::with_capacity(message.len() + usize::from(self.parity_bytes()))?;
13
14 buffer.extend_from_slice(self.generate_parity(message)?)?;
15 buffer.extend_from_slice(message)?;
16
17 Ok(buffer)
18 }
19}
20
21#[cfg(test)]
22mod tests {
23 use ps_buffer::ToBuffer;
24
25 use crate::ReedSolomon;
26
27 type TestError = Box<dyn std::error::Error>;
28
29 #[test]
30 fn test_encode_empty_message() -> Result<(), TestError> {
31 let rs = ReedSolomon::new(2)?;
32 let message = b"".to_buffer()?;
33 let encoded = rs.encode(&message)?;
34
35 assert_eq!(encoded.len(), 4); assert!(rs.validate(&encoded).is_none());
37
38 Ok(())
39 }
40}