init: initial commit of packager
This commit is contained in:
		
						commit
						7964bb84fd
					
				
					 25 changed files with 478 additions and 0 deletions
				
			
		
							
								
								
									
										10
									
								
								pkgfile/Cargo.toml
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										10
									
								
								pkgfile/Cargo.toml
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,10 @@
 | 
			
		|||
[package]
 | 
			
		||||
name = "pkgfile"
 | 
			
		||||
version = "0.1.0"
 | 
			
		||||
edition = "2021"
 | 
			
		||||
 | 
			
		||||
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
 | 
			
		||||
 | 
			
		||||
[dependencies]
 | 
			
		||||
manifest = { path = "../manifest" }
 | 
			
		||||
tar = "0.4.38"
 | 
			
		||||
							
								
								
									
										3
									
								
								pkgfile/pkgfile.txt
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								pkgfile/pkgfile.txt
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,3 @@
 | 
			
		|||
[pkgfile version (1 byte)][size manifest x256 (1 byte)][size manifest x1 (1 byte)]
 | 
			
		||||
[manifest]
 | 
			
		||||
[tar file]
 | 
			
		||||
							
								
								
									
										36
									
								
								pkgfile/src/lib.rs
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										36
									
								
								pkgfile/src/lib.rs
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,36 @@
 | 
			
		|||
pub struct PKGFile {
 | 
			
		||||
    pub manifest: String,
 | 
			
		||||
    pub data: Vec<u8>,
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
impl TryFrom<Vec<u8>> for PKGFile {
 | 
			
		||||
    type Error = ();
 | 
			
		||||
 | 
			
		||||
    fn try_from(value: Vec<u8>) -> Result<Self, ()> {
 | 
			
		||||
        match value[0] {
 | 
			
		||||
            1 => {
 | 
			
		||||
                let header: Vec<u32> = value[..3]
 | 
			
		||||
                    .iter()
 | 
			
		||||
                    .map(|v| u32::from(*v))
 | 
			
		||||
                    .collect();
 | 
			
		||||
                let manifest_size: u32 = ((header[1] << 8) | header[2]);
 | 
			
		||||
                if manifest_size > value.len() as u32 {
 | 
			
		||||
                    return Err(());
 | 
			
		||||
                }
 | 
			
		||||
                Ok(PKGFile {
 | 
			
		||||
                    manifest: match String::from_utf8(
 | 
			
		||||
                        value[
 | 
			
		||||
                            3..(manifest_size as usize)
 | 
			
		||||
                            ].to_vec()
 | 
			
		||||
                        )
 | 
			
		||||
                    {
 | 
			
		||||
                        Ok(s) => s,
 | 
			
		||||
                        _ => return Err(())
 | 
			
		||||
                    },
 | 
			
		||||
                    data: value[(manifest_size as usize)..].to_vec(),
 | 
			
		||||
                })
 | 
			
		||||
            }
 | 
			
		||||
            _ => Err(())
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue