cli: better errors for config.rs file in cli (#1603)
This commit is contained in:
parent
3b0006b3ce
commit
acb4e7119b
|
@ -1,6 +1,6 @@
|
||||||
use anchor_client::Cluster;
|
use anchor_client::Cluster;
|
||||||
use anchor_syn::idl::Idl;
|
use anchor_syn::idl::Idl;
|
||||||
use anyhow::{anyhow, Error, Result};
|
use anyhow::{anyhow, Context, Error, Result};
|
||||||
use clap::{ArgEnum, Parser};
|
use clap::{ArgEnum, Parser};
|
||||||
use heck::SnakeCase;
|
use heck::SnakeCase;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
@ -57,9 +57,10 @@ pub struct Manifest(cargo_toml::Manifest);
|
||||||
|
|
||||||
impl Manifest {
|
impl Manifest {
|
||||||
pub fn from_path(p: impl AsRef<Path>) -> Result<Self> {
|
pub fn from_path(p: impl AsRef<Path>) -> Result<Self> {
|
||||||
cargo_toml::Manifest::from_path(p)
|
cargo_toml::Manifest::from_path(&p)
|
||||||
.map(Manifest)
|
.map(Manifest)
|
||||||
.map_err(Into::into)
|
.map_err(anyhow::Error::from)
|
||||||
|
.with_context(|| format!("Error reading manifest from path: {}", p.as_ref().display()))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn lib_name(&self) -> Result<String> {
|
pub fn lib_name(&self) -> Result<String> {
|
||||||
|
@ -101,8 +102,14 @@ impl Manifest {
|
||||||
let mut cwd_opt = Some(start_from.as_path());
|
let mut cwd_opt = Some(start_from.as_path());
|
||||||
|
|
||||||
while let Some(cwd) = cwd_opt {
|
while let Some(cwd) = cwd_opt {
|
||||||
for f in fs::read_dir(cwd)? {
|
for f in fs::read_dir(cwd).with_context(|| {
|
||||||
let p = f?.path();
|
format!("Error reading the directory with path: {}", cwd.display())
|
||||||
|
})? {
|
||||||
|
let p = f
|
||||||
|
.with_context(|| {
|
||||||
|
format!("Error reading the directory with path: {}", cwd.display())
|
||||||
|
})?
|
||||||
|
.path();
|
||||||
if let Some(filename) = p.file_name() {
|
if let Some(filename) = p.file_name() {
|
||||||
if filename.to_str() == Some("Cargo.toml") {
|
if filename.to_str() == Some("Cargo.toml") {
|
||||||
let m = WithPath::new(Manifest::from_path(&p)?, p);
|
let m = WithPath::new(Manifest::from_path(&p)?, p);
|
||||||
|
@ -341,8 +348,14 @@ impl Config {
|
||||||
let mut cwd_opt = Some(_cwd.as_path());
|
let mut cwd_opt = Some(_cwd.as_path());
|
||||||
|
|
||||||
while let Some(cwd) = cwd_opt {
|
while let Some(cwd) = cwd_opt {
|
||||||
for f in fs::read_dir(cwd)? {
|
for f in fs::read_dir(cwd).with_context(|| {
|
||||||
let p = f?.path();
|
format!("Error reading the directory with path: {}", cwd.display())
|
||||||
|
})? {
|
||||||
|
let p = f
|
||||||
|
.with_context(|| {
|
||||||
|
format!("Error reading the directory with path: {}", cwd.display())
|
||||||
|
})?
|
||||||
|
.path();
|
||||||
if let Some(filename) = p.file_name() {
|
if let Some(filename) = p.file_name() {
|
||||||
if filename.to_str() == Some("Anchor.toml") {
|
if filename.to_str() == Some("Anchor.toml") {
|
||||||
let cfg = Config::from_path(&p)?;
|
let cfg = Config::from_path(&p)?;
|
||||||
|
@ -358,12 +371,9 @@ impl Config {
|
||||||
}
|
}
|
||||||
|
|
||||||
fn from_path(p: impl AsRef<Path>) -> Result<Self> {
|
fn from_path(p: impl AsRef<Path>) -> Result<Self> {
|
||||||
let mut cfg_file = File::open(&p)?;
|
fs::read_to_string(&p)
|
||||||
let mut cfg_contents = String::new();
|
.with_context(|| format!("Error reading the file with path: {}", p.as_ref().display()))?
|
||||||
cfg_file.read_to_string(&mut cfg_contents)?;
|
.parse()
|
||||||
let cfg = cfg_contents.parse()?;
|
|
||||||
|
|
||||||
Ok(cfg)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn wallet_kp(&self) -> Result<Keypair> {
|
pub fn wallet_kp(&self) -> Result<Keypair> {
|
||||||
|
@ -625,15 +635,22 @@ impl Program {
|
||||||
|
|
||||||
// Lazily initializes the keypair file with a new key if it doesn't exist.
|
// Lazily initializes the keypair file with a new key if it doesn't exist.
|
||||||
pub fn keypair_file(&self) -> Result<WithPath<File>> {
|
pub fn keypair_file(&self) -> Result<WithPath<File>> {
|
||||||
fs::create_dir_all("target/deploy/")?;
|
let deploy_dir_path = "target/deploy/";
|
||||||
|
fs::create_dir_all(deploy_dir_path)
|
||||||
|
.with_context(|| format!("Error creating directory with path: {}", deploy_dir_path))?;
|
||||||
let path = std::env::current_dir()
|
let path = std::env::current_dir()
|
||||||
.expect("Must have current dir")
|
.expect("Must have current dir")
|
||||||
.join(format!("target/deploy/{}-keypair.json", self.lib_name));
|
.join(format!("target/deploy/{}-keypair.json", self.lib_name));
|
||||||
if path.exists() {
|
if path.exists() {
|
||||||
return Ok(WithPath::new(File::open(&path)?, path));
|
return Ok(WithPath::new(
|
||||||
|
File::open(&path)
|
||||||
|
.with_context(|| format!("Error opening file with path: {}", path.display()))?,
|
||||||
|
path,
|
||||||
|
));
|
||||||
}
|
}
|
||||||
let program_kp = Keypair::generate(&mut rand::rngs::OsRng);
|
let program_kp = Keypair::generate(&mut rand::rngs::OsRng);
|
||||||
let mut file = File::create(&path)?;
|
let mut file = File::create(&path)
|
||||||
|
.with_context(|| format!("Error creating file with path: {}", path.display()))?;
|
||||||
file.write_all(format!("{:?}", &program_kp.to_bytes()).as_bytes())?;
|
file.write_all(format!("{:?}", &program_kp.to_bytes()).as_bytes())?;
|
||||||
Ok(WithPath::new(file, path))
|
Ok(WithPath::new(file, path))
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue