Add structures to store the content of bom file
This commit is contained in:
		
							parent
							
								
									6a0435d9b6
								
							
						
					
					
						commit
						c172b2be5c
					
				
							
								
								
									
										98
									
								
								tools/copy_bom/src/bom.rs
									
									
									
									
									
										Normal file
									
								
							
							
								
								
								
								
								
									
									
								
							
						
						
									
										98
									
								
								tools/copy_bom/src/bom.rs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,98 @@ | ||||
| //! This file defines data structures to store contents in bom file
 | ||||
| //! as well as all management on these strcutures.
 | ||||
| //! Structures `Bom`, `Target`, `SymLink`, `Source`, `NormalFile`, `FileWithOption`
 | ||||
| //! are used to parse the bom file.
 | ||||
| //! Structures ending with `management` are used to define managements on different levels.
 | ||||
| //! We will construct a BomManagement for each bom file (the top bom file and all included bom files).
 | ||||
| //! Then do real file operations on each BomManagement
 | ||||
| use crate::error::{FILE_NOT_EXISTS_ERROR, INVALID_BOM_FILE_ERROR}; | ||||
| use crate::util::{ | ||||
|     check_file_hash, copy_dir, copy_file, copy_shared_object, create_link, dest_in_root, | ||||
|     find_dependent_shared_objects, find_included_bom_file, mkdir, resolve_envs, | ||||
| }; | ||||
| use serde::{Deserialize, Serialize}; | ||||
| use serde_yaml; | ||||
| use std::collections::{HashSet, VecDeque}; | ||||
| use std::hash::Hash; | ||||
| use std::path::PathBuf; | ||||
| use std::slice::Iter; | ||||
| 
 | ||||
| // The whole bom file
 | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| pub struct Bom { | ||||
|     pub includes: Option<Vec<String>>, | ||||
|     pub excludes: Option<Vec<String>>, | ||||
|     targets: Option<Vec<Target>>, | ||||
| } | ||||
| 
 | ||||
| // target in a bom file.
 | ||||
| // Each target represents the same destination.
 | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| pub struct Target { | ||||
|     target: String, | ||||
|     mkdirs: Option<Vec<String>>, | ||||
|     createlinks: Option<Vec<SymLink>>, | ||||
|     copy: Option<Vec<Source>>, | ||||
| } | ||||
| 
 | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| pub struct SymLink { | ||||
|     src: String, | ||||
|     linkname: String, | ||||
| } | ||||
| 
 | ||||
| // source in a target.
 | ||||
| // each Source has the same `from` directory.
 | ||||
| #[derive(Debug, Clone, Serialize, Deserialize)] | ||||
| pub struct Source { | ||||
|     from: Option<String>, | ||||
|     dirs: Option<Vec<String>>, | ||||
|     files: Option<Vec<NormalFile>>, | ||||
| } | ||||
| 
 | ||||
| // A file need to be copied
 | ||||
| // It can be only a filename; or file with multiple options to enable checking hash, renaming file, etc.
 | ||||
| #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] | ||||
| #[serde(untagged)] | ||||
| pub enum NormalFile { | ||||
|     FileName(String), | ||||
|     FileWithOption(FileWithOption), | ||||
| } | ||||
| 
 | ||||
| // A file with multiple optional options
 | ||||
| #[derive(Debug, Clone, Serialize, Deserialize, PartialEq, Eq)] | ||||
| pub struct FileWithOption { | ||||
|     name: String, | ||||
|     hash: Option<String>, | ||||
|     autodep: Option<bool>, | ||||
|     rename: Option<String>, | ||||
| } | ||||
| 
 | ||||
| /// all operations defined for one bom file
 | ||||
| #[derive(Default)] | ||||
| pub struct BomManagement { | ||||
|     dirs_to_make: Vec<String>, | ||||
|     links_to_create: Vec<(String, String)>, | ||||
|     dirs_to_copy: Vec<(String, String)>, | ||||
|     files_to_copy: Vec<(String, String)>, | ||||
|     shared_objects_to_copy: Vec<(String, String)>, | ||||
| } | ||||
| 
 | ||||
| /// all operations defined for one target
 | ||||
| #[derive(Default)] | ||||
| pub struct TargetManagement { | ||||
|     dirs_to_make: Vec<String>, | ||||
|     links_to_create: Vec<(String, String)>, | ||||
|     dirs_to_copy: Vec<(String, String)>, | ||||
|     files_to_copy: Vec<(String, String)>, | ||||
|     files_autodep: Vec<String>, | ||||
| } | ||||
| 
 | ||||
| /// all operations defined for one source
 | ||||
| #[derive(Default)] | ||||
| pub struct SourceManagement { | ||||
|     dirs_to_copy: Vec<(String, String)>, | ||||
|     files_to_copy: Vec<(String, String)>, | ||||
|     files_autodep: Vec<String>, | ||||
| } | ||||
| 
 | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user