mirror of
https://github.com/CIMEngine/cimengine-build-tools.git
synced 2024-10-05 14:46:01 +03:00
76 lines
2.2 KiB
Rust
76 lines
2.2 KiB
Rust
|
use std::{fs, path::Path};
|
||
|
use toml_edit::{value, DocumentMut, Value};
|
||
|
|
||
|
use crate::types::{Config, Country, NewCommands};
|
||
|
|
||
|
pub fn new(cmd: NewCommands) {
|
||
|
match cmd {
|
||
|
NewCommands::Country {
|
||
|
name,
|
||
|
id,
|
||
|
description,
|
||
|
foundation_date,
|
||
|
flag,
|
||
|
about,
|
||
|
} => {
|
||
|
let name = name.unwrap_or_default();
|
||
|
let description = description.unwrap_or_default();
|
||
|
let foundation_date = foundation_date.unwrap_or_default();
|
||
|
let flag = flag.unwrap_or_default();
|
||
|
let about = about;
|
||
|
|
||
|
let country = Country {
|
||
|
name: name.clone(),
|
||
|
description,
|
||
|
foundation_date,
|
||
|
flag,
|
||
|
about,
|
||
|
tags: Some(vec![]),
|
||
|
};
|
||
|
|
||
|
let config = fs::read_to_string("config.toml").unwrap();
|
||
|
|
||
|
// Validate config
|
||
|
let c = toml::from_str::<Config>(&config);
|
||
|
|
||
|
match c {
|
||
|
Ok(c) => c,
|
||
|
Err(err) => {
|
||
|
panic!("Invalid config: {}", err);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
// Get actual config
|
||
|
let mut config = config.parse::<DocumentMut>().unwrap();
|
||
|
|
||
|
// Add country to layers
|
||
|
let layers = config["country"]["layers"].clone().into_value().unwrap();
|
||
|
|
||
|
let layers = if let Value::Array(mut layers) = layers {
|
||
|
layers.push(&id);
|
||
|
layers
|
||
|
} else {
|
||
|
panic!("layers is not an array");
|
||
|
};
|
||
|
|
||
|
config["country"]["layers"] = value(layers);
|
||
|
|
||
|
fs::write("config.toml", config.to_string()).unwrap();
|
||
|
|
||
|
// Add country to countries
|
||
|
let country_folder = Path::new(".").join("countries").join(&id);
|
||
|
fs::create_dir_all(&country_folder).unwrap();
|
||
|
fs::write(
|
||
|
country_folder.join("country.toml"),
|
||
|
toml::to_string_pretty(&country).unwrap(),
|
||
|
)
|
||
|
.unwrap();
|
||
|
fs::write(
|
||
|
country_folder.join("country.geojson"),
|
||
|
include_str!("./templates/sample.geojson"),
|
||
|
)
|
||
|
.unwrap();
|
||
|
}
|
||
|
}
|
||
|
}
|