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