parsec_tool/subcommands/
list_opcodes.rs

1// Copyright 2020 Contributors to the Parsec project.
2// SPDX-License-Identifier: Apache-2.0
3
4//! Lists the supported opcodes for a given provider.
5
6use crate::error::Result;
7use log::info;
8use parsec_client::BasicClient;
9use std::convert::TryInto;
10use structopt::StructOpt;
11
12/// Lists the supported opcodes for a given provider.
13#[derive(Debug, StructOpt)]
14pub struct ListOpcodes {
15    /// ID of the provider.
16    #[structopt(short = "p", long = "provider")]
17    pub provider: Option<u8>,
18}
19
20impl ListOpcodes {
21    /// Lists the supported opcodes for a given provider.
22    pub fn run(&self, basic_client: BasicClient) -> Result<()> {
23        let provider = match self.provider {
24            Some(provider) => provider.try_into()?,
25            None => basic_client.implicit_provider(),
26        };
27        let opcodes = basic_client.list_opcodes(provider)?;
28
29        info!("Available opcodes for {}:", provider);
30        for provider_opcode in opcodes {
31            println!("0x{:02x} ({:?})", provider_opcode as u32, provider_opcode);
32        }
33        Ok(())
34    }
35}