soroban_cli/commands/cache/actionlog/
read.rs1use 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 #[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}