Skip to content

Commit

Permalink
refactor: Factor out common code for sns cli (#2586)
Browse files Browse the repository at this point in the history
# Description
There is a function that calls the sns cli and that deals with corner cases.  This is used in e.g. `dfx sns config validate`.  In this PR the common code is also used in `dfx sns config create`.
  • Loading branch information
bitdivine committed Sep 20, 2022
1 parent 4fa74b9 commit 3caa3cb
Showing 1 changed file with 9 additions and 30 deletions.
39 changes: 9 additions & 30 deletions src/dfx/src/lib/sns/create_config.rs
@@ -1,42 +1,21 @@
//! Code for creating SNS configurations
use anyhow::{anyhow, Context};
use fn_error_context::context;
use std::ffi::OsString;
use std::path::Path;
use std::process::{self, Command};

use crate::lib::error::DfxResult;
use crate::lib::sns::sns_cli::call_sns_cli;
use crate::Environment;

/// Ceates an SNS configuration template.
#[context("Failed to create sns config at {}.", path.display())]
pub fn create_config(env: &dyn Environment, path: &Path) -> DfxResult {
let cli_name = "sns";
let sns_cli = env
.get_cache()
.get_binary_command_path(cli_name)
.with_context(|| format!("Could not find bundled binary '{cli_name}'."))?;
let mut command = Command::new(sns_cli);
command
.arg("init-config-file")
.arg("--init-config-file-path")
.arg(path)
.arg("new");
command
.stdin(process::Stdio::null())
.output()
.map_err(anyhow::Error::from)
.and_then(|output| {
if output.status.success() {
Ok(())
} else {
Err(anyhow!(
"Failed to create an SNS configuration.\n{:?} {:?}\nStdout:\n{:?}\n\nStderr:\n{:?}",
command.get_program(),
command.get_args(),
String::from_utf8_lossy(&output.stdout),
String::from_utf8_lossy(&output.stderr)
))
}
})?;
let args = vec![
OsString::from("init-config-file"),
OsString::from("--init-config-file-path"),
OsString::from(path),
OsString::from("new"),
];
call_sns_cli(env, &args)?;
Ok(())
}

0 comments on commit 3caa3cb

Please sign in to comment.