use crate::Error;
use crate::{get_store, Project, StageContext, Store};
use clap::ArgMatches;
use std::fs::File;
use std::io::Read;
use tracing::{info, instrument};
#[instrument(skip(subcommand))]
pub fn set(project_path: &str, subcommand: &ArgMatches) -> Result<(), Error> {
info!("Set parameter value");
let project = Project::from_path(project_path)?;
let param_name = subcommand.value_of("name").unwrap();
let param_value = subcommand.value_of("value").unwrap();
let context = match StageContext::from_env() {
Some(context) => context,
None => {
return Err(Error::SetParameterError(
"cannot run 'set' outside a stage context",
param_name.to_string(),
))
}
};
let param_name = format!("{}:{}", context.service, ¶m_name);
let mut store = get_store(project)?;
store.set(¶m_name, param_value)?;
Ok(())
}
#[instrument(skip(subcommand))]
pub fn set_file(project_path: &str, subcommand: &ArgMatches) -> Result<(), Error> {
info!("Set parameter value file");
let project = Project::from_path(project_path)?;
let param_name = subcommand.value_of("name").unwrap();
let filename = subcommand.value_of("filename").unwrap();
let context = match StageContext::from_env() {
Some(context) => context,
None => {
return Err(Error::SetParameterError(
"cannot run 'set' outside a stage context",
param_name.to_string(),
))
}
};
let param_name = format!("{}:{}", context.service, ¶m_name);
let mut store = get_store(project)?;
let mut file = File::open(filename)?;
let mut data = Vec::new();
file.read_to_end(&mut data)?;
store.set_bytes(¶m_name, &data)?;
Ok(())
}