cargo_flutter/package/
mod.rs

1use std::path::{Path, PathBuf};
2
3pub mod apk;
4pub mod appimage;
5
6pub struct Package {
7    name: String,
8    bin: Vec<Item>,
9    lib: Vec<Item>,
10    asset: Vec<Item>,
11}
12
13pub struct Item {
14    path: PathBuf,
15    name: String,
16}
17
18impl Item {
19    pub fn new(path: PathBuf, name: String) -> Self {
20        Self { path, name }
21    }
22
23    pub fn path(&self) -> &Path {
24        &self.path
25    }
26
27    pub fn name(&self) -> &str {
28        &self.name
29    }
30}
31
32impl From<PathBuf> for Item {
33    fn from(path: PathBuf) -> Self {
34        let name = path.file_name().unwrap().to_str().unwrap().to_string();
35        Self { path, name }
36    }
37}
38
39impl Package {
40    pub fn new(name: &str) -> Self {
41        Self {
42            name: name.to_string(),
43            bin: Default::default(),
44            lib: Default::default(),
45            asset: Default::default(),
46        }
47    }
48
49    pub fn name(&self) -> &str {
50        &self.name
51    }
52
53    pub fn bins(&self) -> &[Item] {
54        &self.bin
55    }
56
57    pub fn libs(&self) -> &[Item] {
58        &self.lib
59    }
60
61    pub fn assets(&self) -> &[Item] {
62        &self.asset
63    }
64
65    pub fn add_bin<T: Into<Item>>(&mut self, item: T) {
66        self.bin.push(item.into());
67    }
68
69    pub fn add_lib<T: Into<Item>>(&mut self, item: T) {
70        self.lib.push(item.into());
71    }
72
73    pub fn add_asset<T: Into<Item>>(&mut self, item: T) {
74        self.asset.push(item.into());
75    }
76}