tera_client_packer/manifest/
mod.rs

1use serde::{Deserialize, Serialize};
2
3use std::fs;
4use std::path::Path;
5
6#[derive(Clone, Debug, Serialize, Deserialize)]
7pub struct Manifest {
8  pub total_size: u64,
9  pub compressed: bool,
10  pub parts: i32,
11  pub package_list: Vec<PackageEntry>,
12  pub revision: i32,
13}
14
15#[derive(Clone, Debug, Serialize, Deserialize)]
16pub struct PackageEntry {
17  pub name: String,
18  pub package_size: u64,
19  pub hash: Option<String>,
20  pub file_list: Vec<FileEntry>,
21}
22
23#[derive(Clone, Debug, Serialize, Deserialize)]
24pub struct FileEntry {
25  pub key: String,
26  pub offset: u64,
27  pub size: u64,
28}
29
30impl Default for Manifest {
31  fn default() -> Self {
32    Self {
33      package_list: Vec::new(),
34      compressed: true,
35      parts: 0,
36      revision: 0,
37      total_size: 0,
38    }
39  }
40}
41
42impl Manifest {
43  pub fn new() -> Self {
44    Self::default()
45  }
46
47  pub fn from_file<P: AsRef<Path>>(path: P) -> Self {
48    let file = fs::File::open(path).unwrap();
49    serde_json::from_reader::<fs::File, Self>(file).unwrap()
50  }
51
52  pub fn write<P: AsRef<Path>>(&self, path: P) {
53    let file = fs::File::create(path).unwrap();
54    serde_json::to_writer(file, &self).unwrap();
55  }
56
57  pub fn set_total_size(&mut self, total_size: u64) -> &Self {
58    self.total_size = total_size;
59    self
60  }
61
62  pub fn add_package(&mut self, package: PackageEntry) {
63    self.package_list.push(package);
64    self.parts += 1;
65  }
66}