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 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}