leo_lang/cli/helpers/
context.rs1use aleo_std;
18use leo_errors::{CliError, Result};
19use leo_package::Manifest;
20
21use aleo_std::aleo_dir;
22use snarkvm::prelude::{Network, PrivateKey};
23use std::{env::current_dir, path::PathBuf, str::FromStr};
24
25#[derive(Clone)]
29pub struct Context {
30 pub path: Option<PathBuf>,
32 pub home: Option<PathBuf>,
34 pub recursive: bool,
37}
38
39impl Context {
40 pub fn new(path: Option<PathBuf>, home: Option<PathBuf>, recursive: bool) -> Result<Context> {
41 Ok(Context { path, home, recursive })
42 }
43
44 pub fn parent_dir(&self) -> Result<PathBuf> {
46 match &self.path {
47 Some(path) => {
48 let mut path = path.clone();
49 path.pop();
50 Ok(path)
51 }
52 None => Ok(current_dir().map_err(CliError::cli_io_error)?),
53 }
54 }
55
56 pub fn dir(&self) -> Result<PathBuf> {
58 match &self.path {
59 Some(path) => Ok(path.clone()),
60 None => Ok(current_dir().map_err(CliError::cli_io_error)?),
61 }
62 }
63
64 pub fn home(&self) -> Result<PathBuf> {
66 match &self.home {
67 Some(path) => Ok(path.clone()),
68 None => Ok(aleo_dir()),
69 }
70 }
71
72 pub fn open_manifest(&self) -> Result<Manifest> {
74 let path = self.dir()?;
75 let manifest_path = path.join(leo_package::MANIFEST_FILENAME);
76 let manifest = Manifest::read_from_file(manifest_path)?;
77 Ok(manifest)
78 }
79
80 pub fn dotenv_private_key<N: Network>(&self) -> Result<PrivateKey<N>> {
82 dotenvy::from_path(self.dir()?.join(".env")).map_err(|_| CliError::failed_to_get_private_key_from_env())?;
83 let private_key = dotenvy::var("PRIVATE_KEY").map_err(|_| CliError::failed_to_get_private_key_from_env())?;
85 Ok(PrivateKey::<N>::from_str(&private_key)?)
87 }
88
89 pub fn dotenv_endpoint(&self) -> Result<String> {
91 dotenvy::from_path(self.dir()?.join(".env")).map_err(|_| CliError::failed_to_get_endpoint_from_env())?;
92 Ok(dotenvy::var("ENDPOINT").map_err(|_| CliError::failed_to_get_endpoint_from_env())?)
94 }
95
96 pub fn dotenv_network(&self) -> Result<String> {
98 dotenvy::from_path(self.dir()?.join(".env")).map_err(|_| CliError::failed_to_get_network_from_env())?;
99 Ok(dotenvy::var("NETWORK").map_err(|_| CliError::failed_to_get_network_from_env())?)
101 }
102
103 pub fn get_endpoint(&self, endpoint: &Option<String>) -> Result<String> {
106 match endpoint {
107 Some(endpoint) => Ok(endpoint.clone()),
108 None => Ok(self.dotenv_endpoint()?),
109 }
110 }
111
112 pub fn get_network(&self, network: &Option<String>) -> Result<String> {
115 match network {
116 Some(network) => Ok(network.clone()),
117 None => Ok(self.dotenv_network()?),
118 }
119 }
120
121 pub fn get_private_key<N: Network>(&self, private_key: &Option<String>) -> Result<PrivateKey<N>> {
124 match private_key {
125 Some(private_key) => Ok(PrivateKey::<N>::from_str(private_key)?),
126 None => self.dotenv_private_key(),
127 }
128 }
129}