diff --git a/cmd/soroban-cli/src/commands/contract/info/env_meta.rs b/cmd/soroban-cli/src/commands/contract/info/env_meta.rs index b34610767..f2ca79919 100644 --- a/cmd/soroban-cli/src/commands/contract/info/env_meta.rs +++ b/cmd/soroban-cli/src/commands/contract/info/env_meta.rs @@ -25,6 +25,8 @@ pub enum Error { NoSACEnvMeta(), #[error("no meta present in provided WASM file")] NoEnvMetaPresent(), + #[error(transparent)] + Json(#[from] serde_json::Error), } impl Cmd { @@ -42,12 +44,8 @@ impl Cmd { let res = match self.common.output { InfoOutput::XdrBase64 => spec.env_meta_base64.unwrap(), - InfoOutput::Json => { - unreachable!("TODO") - } - InfoOutput::JsonFormatted => { - unreachable!("TODO") - } + InfoOutput::Json => serde_json::to_string(&spec.env_meta)?, + InfoOutput::JsonFormatted => serde_json::to_string_pretty(&spec.env_meta)?, }; Ok(res) diff --git a/cmd/soroban-cli/src/commands/contract/info/interface.rs b/cmd/soroban-cli/src/commands/contract/info/interface.rs index 8aaf9db72..8f7b26311 100644 --- a/cmd/soroban-cli/src/commands/contract/info/interface.rs +++ b/cmd/soroban-cli/src/commands/contract/info/interface.rs @@ -23,16 +23,16 @@ pub enum Error { Spec(#[from] contract::Error), #[error("no interface present in provided WASM file")] NoInterfacePresent(), + #[error(transparent)] + Json(#[from] serde_json::Error), } impl Cmd { pub async fn run(&self) -> Result { let bytes = fetch_wasm(&self.common).await?; - let base64 = if bytes.is_none() { - let res = Spec::spec_to_base64(&soroban_sdk::token::StellarAssetSpec::spec_xdr())?; - - res.0 + let (base64, spec) = if bytes.is_none() { + Spec::spec_to_base64(&soroban_sdk::token::StellarAssetSpec::spec_xdr())? } else { let spec = Spec::new(&bytes.unwrap())?; @@ -40,17 +40,13 @@ impl Cmd { return Err(NoInterfacePresent()); } - spec.spec_base64.unwrap() + (spec.spec_base64.unwrap(), spec.spec) }; let res = match self.common.output { InfoOutput::XdrBase64 => base64, - InfoOutput::Json => { - unreachable!("TODO") - } - InfoOutput::JsonFormatted => { - unreachable!("TODO") - } + InfoOutput::Json => serde_json::to_string(&spec)?, + InfoOutput::JsonFormatted => serde_json::to_string_pretty(&spec)?, }; Ok(res) diff --git a/cmd/soroban-cli/src/commands/contract/info/meta.rs b/cmd/soroban-cli/src/commands/contract/info/meta.rs index e6f5b5f02..185b1bbed 100644 --- a/cmd/soroban-cli/src/commands/contract/info/meta.rs +++ b/cmd/soroban-cli/src/commands/contract/info/meta.rs @@ -26,6 +26,8 @@ pub enum Error { NoSACMeta(), #[error("no meta present in provided WASM file")] NoMetaPresent(), + #[error(transparent)] + Json(#[from] serde_json::Error), } impl Cmd { @@ -43,12 +45,8 @@ impl Cmd { let res = match self.common.output { InfoOutput::XdrBase64 => spec.meta_base64.unwrap(), - InfoOutput::Json => { - unreachable!("TODO") - } - InfoOutput::JsonFormatted => { - unreachable!("TODO") - } + InfoOutput::Json => serde_json::to_string(&spec.meta)?, + InfoOutput::JsonFormatted => serde_json::to_string_pretty(&spec.meta)?, }; Ok(res)