39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			39 lines
		
	
	
		
			1.1 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use hbb_common::{bail, ResultType};
 | |
| use std::{
 | |
|     fs::{self, File},
 | |
|     io::prelude::*,
 | |
|     path::Path,
 | |
| };
 | |
| 
 | |
| #[allow(dead_code)]
 | |
| pub fn extract_resources(root_path: &str) -> ResultType<()> {
 | |
|     let mut resources: Vec<(&str, &[u8])> = Vec::new();
 | |
|     resources.push((outfile_4, &outdata_4));
 | |
|     do_extract(root_path, resources)?;
 | |
|     Ok(())
 | |
| }
 | |
| 
 | |
| #[allow(dead_code)]
 | |
| fn do_extract(root_path: &str, resources: Vec<(&str, &[u8])>) -> ResultType<()> {
 | |
|     let mut root_path = root_path.replace("\\", "/");
 | |
|     if !root_path.ends_with('/') {
 | |
|         root_path.push('/');
 | |
|     }
 | |
|     let root_path = Path::new(&root_path);
 | |
|     for (outfile, data) in resources {
 | |
|         let outfile_path = root_path.join(outfile);
 | |
|         match outfile_path.parent().and_then(|p| p.to_str()) {
 | |
|             None => {
 | |
|                 bail!("Failed to get parent of {}", outfile_path.display());
 | |
|             }
 | |
|             Some(p) => {
 | |
|                 fs::create_dir_all(p)?;
 | |
|                 let mut of = File::create(outfile_path)?;
 | |
|                 of.write_all(data)?;
 | |
|                 of.flush()?;
 | |
|             }
 | |
|         }
 | |
|     }
 | |
|     Ok(())
 | |
| }
 |