soroban_cli/commands/cache/actionlog/
read.rs

1use std::{fs, io, path::PathBuf};
2
3use crate::config::{data, locator};
4
5#[derive(thiserror::Error, Debug)]
6pub enum Error {
7    #[error(transparent)]
8    Config(#[from] locator::Error),
9    #[error(transparent)]
10    Data(#[from] data::Error),
11    #[error("failed to find cache entry {0}")]
12    NotFound(String),
13    #[error(transparent)]
14    SerdeJson(#[from] serde_json::Error),
15}
16
17#[derive(Debug, clap::Parser, Clone)]
18#[group(skip)]
19pub struct Cmd {
20    /// ID of the cache entry
21    #[arg(long)]
22    pub id: String,
23}
24
25impl Cmd {
26    pub fn run(&self) -> Result<(), Error> {
27        let file = self.file()?;
28        tracing::debug!("reading file {}", file.display());
29        let mut file = fs::File::open(file).map_err(|_| Error::NotFound(self.id.clone()))?;
30        let mut stdout = io::stdout();
31        let _ = io::copy(&mut file, &mut stdout);
32        Ok(())
33    }
34
35    pub fn file(&self) -> Result<PathBuf, Error> {
36        Ok(data::actions_dir()?.join(&self.id).with_extension("json"))
37    }
38}