opentitanlib/test_utils/
bootstrap.rs1use anyhow::Result;
6use clap::Args;
7use std::path::{Path, PathBuf};
8
9use crate::app::{StagedProgressBar, TransportWrapper};
10use crate::bootstrap::{self, BootstrapOptions};
11
12#[derive(Debug, Args)]
14pub struct Bootstrap {
15 #[command(flatten)]
16 pub options: BootstrapOptions,
17
18 #[arg(long)]
20 pub bootstrap: Option<PathBuf>,
21}
22
23impl Bootstrap {
24 pub fn init(
25 &self,
26 transport: &TransportWrapper,
27 ) -> Result<Option<Box<dyn erased_serde::Serialize>>> {
28 if let Some(bootstrap) = &self.bootstrap {
29 self.load(transport, bootstrap)?;
30 }
31 Ok(None)
32 }
33
34 pub fn load(&self, transport: &TransportWrapper, file: &Path) -> Result<()> {
35 let payload = std::fs::read(file)?;
36 let progress = StagedProgressBar::new();
37 let mut options = self.options.clone();
38 if options.clear_uart.is_none() {
39 options.clear_uart = Some(true);
40 }
41 bootstrap::Bootstrap::update_with_progress(transport, &options, &payload, &progress)?;
42 Ok(())
43 }
44}