cargo_drone/
config.rs

1//! `Drone.toml` config.
2
3use failure::Error;
4use std::env;
5use std::fs::File;
6use std::io::prelude::*;
7use toml;
8
9/// Root config.
10#[derive(Deserialize)]
11pub struct Root {
12  /// LLVM target.
13  pub target: String,
14  /// LLVM test target.
15  pub test_target: String,
16  /// Test cross-compile toolchain.
17  pub test_cross_compile: Option<String>,
18  /// OpenOCD config.
19  pub openocd: Option<Openocd>,
20  /// ITM config.
21  pub itm: Option<Itm>,
22}
23
24/// OpenOCD config.
25#[derive(Deserialize)]
26pub struct Openocd {
27  /// Config files.
28  pub config: Vec<String>,
29}
30
31/// ITM config.
32#[derive(Deserialize)]
33pub struct Itm {
34  /// ITM frequency.
35  pub frequency: u32,
36}
37
38/// Reads and parses `Drone.toml` config.
39pub fn read() -> Result<Root, Error> {
40  let path = env::current_dir()?.join("Drone.toml");
41  let mut buffer = String::new();
42  let mut file = File::open(&path)?;
43  file.read_to_string(&mut buffer)?;
44  Ok(toml::from_str(&buffer)?)
45}