scrapyard_core/
cargo.rs

1use mcu::{ARMCore, Core, MCUConf};
2
3#[derive(Serialize, Deserialize, Debug)]
4pub enum CrateType {
5    Binary,
6    Library,
7}
8
9#[derive(Serialize, Deserialize, Debug)]
10pub struct SemVer {
11    major: u8,
12    minor: u8,
13    patch: u8,
14}
15
16impl SemVer {
17    pub fn new(major: u8, minor: u8, patch: u8) -> SemVer {
18        SemVer {
19            major: major,
20            minor: minor,
21            patch: patch,
22        }
23    }
24
25    pub fn get_major(&self) -> u8 {
26        self.major
27    }
28
29    pub fn get_minor(&self) -> u8 {
30        self.minor
31    }
32
33    pub fn get_patch(&self) -> u8 {
34        self.patch
35    }
36}
37
38#[derive(Serialize, Deserialize, Debug)]
39pub struct Dependency {
40    name: String,
41    version: SemVer,
42}
43
44impl Dependency {
45    pub fn new(name: &str, version: SemVer) -> Dependency {
46        Dependency {
47            name: name.to_owned(),
48            version: version,
49        }
50    }
51
52    pub fn get_name(&self) -> &str {
53        &self.name
54    }
55
56    pub fn get_version(&self) -> &SemVer {
57        &self.version
58    }
59}
60
61#[derive(Serialize, Deserialize, Debug)]
62pub struct Cargo {
63    name: String,
64    crate_type: CrateType,
65    version: SemVer,
66    authors: Vec<String>,
67    dependencies: Vec<Dependency>,
68    target: String,
69}
70
71impl Cargo {
72    pub fn new(mcu_conf: &MCUConf) -> Cargo {
73        Cargo {
74            name: String::new(),
75            crate_type: CrateType::Binary,
76            version: SemVer {
77                major: 0,
78                minor: 1,
79                patch: 0,
80            },
81            authors: Vec::new(),
82            dependencies: Vec::new(),
83            target: Cargo::set_target(mcu_conf.get_core()),
84        }
85    }
86
87    pub fn set_crate_name(&mut self, name: &str) {
88        self.name = name.to_owned()
89    }
90
91    // TODO: Handle floating point
92    // thumbv7em-none-eabihf
93    fn set_target(core: &Core) -> String {
94        match core {
95            &Core::ARM(ref arm) => match arm {
96                &ARMCore::CortexM0 => String::from("thumbv6m-none-eabi"),
97                &ARMCore::CortexM3 => String::from("thumbv7m-none-eabi"),
98                &ARMCore::CortexM4 => String::from("thumbv7em-none-eabi"),
99                &ARMCore::CortexM7 => String::from("thumbv7em-none-eabi"),
100            },
101            &Core::AVR => String::new(),
102            &Core::STM8 => String::new(),
103            &Core::MSP430 => String::new(),
104        }
105    }
106
107    pub fn get_crate_type(&self) -> &CrateType {
108        &self.crate_type
109    }
110
111    pub fn add_crate(&mut self, dependency: Dependency) {
112        self.dependencies.push(dependency);
113    }
114
115    pub fn rm_crate(&mut self) {
116        unimplemented!();
117    }
118}