soroban_cli/commands/contract/bindings/
rust.rs

1use 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}