tera_client_packer/manifest/
mod.rs1use 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}