ckbfs_types/
lib.rs

1#![no_std]
2extern crate alloc;
3pub use crate::generated::ckbfs::{Bytes, CKBFSData};
4use alloc::{string::String, vec::Vec};
5
6use generated::ckbfs::{Byte32, Uint32};
7use molecule::prelude::{Builder, Entity};
8
9pub mod generated;
10
11impl Into<Bytes> for &[u8] {
12    fn into(self) -> Bytes {
13        let len = self.len();
14        let mut vec: Vec<u8> = Vec::with_capacity(4 + len);
15        vec.extend_from_slice(&(len as u32).to_le_bytes()[..]);
16        vec.extend_from_slice(self);
17        Bytes::new_unchecked(Bytes::from_slice(vec.as_slice()).unwrap().as_bytes())
18    }
19}
20
21
22#[derive(Debug, Clone)]
23pub struct CKBFSDataNative {
24    pub index: u32,
25    pub checksum: u32,
26    pub content_type: String,
27    pub filename: String,
28}
29
30impl From<CKBFSDataNative> for CKBFSData {
31    fn from(data: CKBFSDataNative) -> Self {
32        let content_type = data.content_type.as_bytes().into();
33        let filename = data.filename.as_bytes().into();
34        let index = 
35        Uint32::new_unchecked(molecule::bytes::Bytes::from(       
36            data.index.to_le_bytes().to_vec(),
37        ));
38        CKBFSData::new_builder()
39            .index(index)
40            .checksum(Uint32::new_unchecked(molecule::bytes::Bytes::from(
41                data.checksum.to_le_bytes().to_vec(),
42            )))
43            .filename(filename)
44            .content_type(content_type)
45            .build()
46    }
47}
48
49impl Into<CKBFSDataNative> for CKBFSData {
50    fn into(self) -> CKBFSDataNative {
51        let content_type = String::from_utf8(self.content_type().as_slice().to_vec())
52            .expect("Failed to extract content-type");
53        let filename = String::from_utf8(self.filename().as_slice().to_vec())
54            .expect("Failed to extract filname");
55        let index = u32::from_le_bytes(self.index().as_slice().try_into().unwrap());
56        let checksum = u32::from_le_bytes(self.checksum().as_slice().try_into().unwrap());
57        CKBFSDataNative {
58            index,
59            checksum,
60            content_type,
61            filename,
62        }
63    }
64}