soroban_cli/commands/contract/bindings/
rust.rs1use std::fmt::Debug;
2
3use clap::{command, Parser};
4use soroban_spec_rust::{self, ToFormattedString};
5
6use crate::wasm;
7
8#[derive(Parser, Debug, Clone)]
9#[group(skip)]
10pub struct Cmd {
11 #[command(flatten)]
12 wasm: wasm::Args,
13}
14
15#[derive(thiserror::Error, Debug)]
16pub enum Error {
17 #[error("generate rust from file: {0}")]
18 GenerateRustFromFile(soroban_spec_rust::GenerateFromFileError),
19 #[error("format rust error: {0}")]
20 FormatRust(String),
21}
22
23impl Cmd {
24 pub fn run(&self) -> Result<(), Error> {
25 let wasm_path_str = self.wasm.wasm.to_string_lossy();
26 let code = soroban_spec_rust::generate_from_file(&wasm_path_str, None)
27 .map_err(Error::GenerateRustFromFile)?;
28 match code.to_formatted_string() {
29 Ok(formatted) => {
30 println!("{formatted}");
31 Ok(())
32 }
33 Err(e) => {
34 println!("{code}");
35 Err(Error::FormatRust(e.to_string()))
36 }
37 }
38 }
39}