cli/command/
return_code.rs

1// SPDX-License-Identifier: GPL-3-0-or-later
2// Copyright (c) 2024-2025 Jarkko Sakkinen
3// Copyright (c) 2025 Opinsys Oy
4
5use crate::{cli::SubCommand, command::CommandError, job::Job, parse_hex_u32};
6use clap::Args;
7use tpm2_protocol::data::TpmRc;
8
9fn parse_rc(rc_str: &str) -> Result<TpmRc, String> {
10    let rc_u32 = parse_hex_u32(rc_str).map_err(|_| "malformed value".to_string())?;
11    TpmRc::try_from(rc_u32).map_err(|_| "unknown discriminant".to_string())
12}
13
14/// Prints a TPM return code in human-readable format.
15#[derive(Args, Debug)]
16pub struct ReturnCode {
17    /// Return code in hex or decimal
18    #[arg(value_parser = parse_rc)]
19    pub rc: TpmRc,
20}
21
22impl SubCommand for ReturnCode {
23    fn run(&self, job: &mut Job) -> Result<(), CommandError> {
24        writeln!(job.writer, "{}", self.rc)?;
25        Ok(())
26    }
27
28    fn is_local(&self) -> bool {
29        true
30    }
31}