refactor: ♻️ Move parse_targets into targets mod

This commit is contained in:
Sergio Gasquez 2022-09-29 12:58:10 +00:00
parent 0f87e8ccc7
commit 6890cc90f5
3 changed files with 80 additions and 76 deletions

View File

@ -4,12 +4,10 @@ use crate::llvm_toolchain::LlvmToolchain;
use crate::rust_toolchain::{
check_rust_installation, get_rustup_home, install_riscv_target, RustCrate, RustToolchain,
};
use crate::targets::Target;
use crate::targets::{parse_targets, Target};
#[cfg(windows)]
use crate::utils::check_arguments;
use crate::utils::{
clear_dist_folder, export_environment, logging::initialize_logger, parse_targets,
};
use crate::utils::{clear_dist_folder, export_environment, logging::initialize_logger};
use anyhow::Result;
use clap::Parser;
use embuild::espidf::{parse_esp_idf_git_ref, EspIdfRemote};

View File

@ -1,5 +1,8 @@
//! ESP32 chip variants support.
use crate::emoji;
use log::debug;
use std::collections::HashSet;
use strum::{Display, EnumString};
#[derive(Clone, Copy, Hash, PartialEq, Eq, Debug, Display, EnumString)]
@ -18,3 +21,77 @@ pub enum Target {
#[strum(serialize = "esp32c3")]
ESP32C3,
}
impl Target {
pub fn from_str(s: &str) -> Option<Self> {
match s {
"esp32" => Some(Target::ESP32),
"esp32s2" => Some(Target::ESP32S2),
"esp32s3" => Some(Target::ESP32S3),
"esp32c3" => Some(Target::ESP32C3),
_ => None,
}
}
}
/// Returns a vector of Chips from a comma or space separated string.
pub fn parse_targets(targets_str: &str) -> Result<HashSet<Target>, String> {
debug!("{} Parsing targets: {}", emoji::DEBUG, targets_str);
let mut targets: HashSet<Target> = HashSet::new();
if targets_str.contains("all") {
targets.insert(Target::ESP32);
targets.insert(Target::ESP32S2);
targets.insert(Target::ESP32S3);
targets.insert(Target::ESP32C3);
return Ok(targets);
}
let targets_str: HashSet<&str> = if targets_str.contains(' ') || targets_str.contains(',') {
targets_str.split([',', ' ']).collect()
} else {
vec![targets_str].into_iter().collect()
};
for target in targets_str {
targets.insert(Target::from_str(target).unwrap());
}
debug!("{} Parsed targets: {:?}", emoji::DEBUG, targets);
Ok(targets)
}
#[cfg(test)]
mod tests {
use crate::parse_targets;
use crate::Target;
#[test]
fn test_parse_targets() {
assert_eq!(
parse_targets("esp32"),
Ok([Target::ESP32].into_iter().collect())
);
assert_eq!(
parse_targets("esp32,esp32s2"),
Ok([Target::ESP32, Target::ESP32S2].into_iter().collect())
);
assert_eq!(
parse_targets("esp32s3 esp32"),
Ok([Target::ESP32S3, Target::ESP32].into_iter().collect())
);
assert_eq!(
parse_targets("esp32s3,esp32,esp32c3"),
Ok([Target::ESP32S3, Target::ESP32, Target::ESP32C3]
.into_iter()
.collect())
);
assert_eq!(
parse_targets("all"),
Ok([
Target::ESP32,
Target::ESP32S2,
Target::ESP32S3,
Target::ESP32C3
]
.into_iter()
.collect())
);
}
}

View File

@ -1,12 +1,10 @@
use crate::emoji;
use crate::espidf::get_dist_path;
use crate::targets::Target;
use anyhow::{bail, Result};
use dirs::home_dir;
use flate2::bufread::GzDecoder;
use log::{debug, info};
use log::info;
use std::{
collections::HashSet,
fs::{create_dir_all, remove_dir_all, File},
io::{copy, BufReader, Write},
path::{Path, PathBuf},
@ -34,37 +32,6 @@ pub fn clear_dist_folder() -> Result<()> {
Ok(())
}
/// Returns a vector of Chips from a comma or space separated string.
pub fn parse_targets(targets_str: &str) -> Result<HashSet<Target>, String> {
debug!("{} Parsing targets: {}", emoji::DEBUG, targets_str);
let mut targets: HashSet<Target> = HashSet::new();
if targets_str.contains("all") {
targets.insert(Target::ESP32);
targets.insert(Target::ESP32S2);
targets.insert(Target::ESP32S3);
targets.insert(Target::ESP32C3);
return Ok(targets);
}
let targets_str: HashSet<&str> = if targets_str.contains(' ') || targets_str.contains(',') {
targets_str.split([',', ' ']).collect()
} else {
vec![targets_str].into_iter().collect()
};
for target in targets_str {
match target {
"esp32" => targets.insert(Target::ESP32),
"esp32s2" => targets.insert(Target::ESP32S2),
"esp32s3" => targets.insert(Target::ESP32S3),
"esp32c3" => targets.insert(Target::ESP32C3),
_ => {
return Err(format!("Unknown target: {}", target));
}
};
}
debug!("{} Parsed targets: {:?}", emoji::DEBUG, targets);
Ok(targets)
}
/// Returns the path to the home directory.
pub fn get_home_dir() -> String {
home_dir().unwrap().display().to_string()
@ -186,41 +153,3 @@ pub fn check_arguments(targets: &HashSet<Target>, espidf_version: &Option<String
Ok(())
}
#[cfg(test)]
mod tests {
use crate::utils::parse_targets;
use crate::Target;
#[test]
fn test_parse_targets() {
assert_eq!(
parse_targets("esp32"),
Ok([Target::ESP32].into_iter().collect())
);
assert_eq!(
parse_targets("esp32,esp32s2"),
Ok([Target::ESP32, Target::ESP32S2].into_iter().collect())
);
assert_eq!(
parse_targets("esp32s3 esp32"),
Ok([Target::ESP32S3, Target::ESP32].into_iter().collect())
);
assert_eq!(
parse_targets("esp32s3,esp32,esp32c3"),
Ok([Target::ESP32S3, Target::ESP32, Target::ESP32C3]
.into_iter()
.collect())
);
assert_eq!(
parse_targets("all"),
Ok([
Target::ESP32,
Target::ESP32S2,
Target::ESP32S3,
Target::ESP32C3
]
.into_iter()
.collect())
);
}
}