slab.rs 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. use crate::serial::{Decodable, Encodable};
  2. use crate::Result;
  3. pub struct Slab {
  4. asset_type: String,
  5. index: u64,
  6. payload: Vec<u8>,
  7. }
  8. impl Slab {
  9. pub fn new(asset_type: String, payload: Vec<u8>) -> Self {
  10. let index = 0;
  11. Slab {
  12. asset_type,
  13. index,
  14. payload,
  15. }
  16. }
  17. pub fn set_index(&mut self, index: u64) {
  18. self.index = index;
  19. }
  20. pub fn get_index(&self) -> u64 {
  21. self.index
  22. }
  23. pub fn get_payload(&self) -> Vec<u8> {
  24. self.payload.clone()
  25. }
  26. }
  27. impl Encodable for Slab {
  28. fn encode<S: std::io::Write>(&self, mut s: S) -> Result<usize> {
  29. let mut len = 0;
  30. len += self.asset_type.encode(&mut s)?;
  31. len += self.index.encode(&mut s)?;
  32. len += self.payload.encode(&mut s)?;
  33. Ok(len)
  34. }
  35. }
  36. impl Decodable for Slab {
  37. fn decode<D: std::io::Read>(mut d: D) -> Result<Self> {
  38. Ok(Self {
  39. asset_type: Decodable::decode(&mut d)?,
  40. index: Decodable::decode(&mut d)?,
  41. payload: Decodable::decode(&mut d)?,
  42. })
  43. }
  44. }