rectangle_device_sandbox/
runtime.rs1use crate::types::{ImageDigest, SandboxError};
2use async_process::{Command, Stdio};
3use std::error::Error;
4
5pub fn command() -> Command {
6 Command::new("podman")
7}
8
9pub async fn image_exists(id: &ImageDigest) -> Result<bool, Box<dyn Error>> {
10 let mut command = command();
11 Ok(command
12 .arg("image").arg("exists")
13 .arg(id.digest.as_str())
14 .status().await?.success())
15}
16
17pub async fn pull(id: &ImageDigest) -> Result<(), Box<dyn Error>> {
18 let mut command = command();
19 let digest = String::from_utf8(
20 command
21 .arg("pull")
22 .arg(id.image.as_str())
23 .stderr(Stdio::inherit())
24 .output().await?.stdout)?;
25
26 let digest = digest.trim();
27 if digest == id.digest.as_str() {
28 Ok(())
29 } else {
30 Err(Box::new(SandboxError::UnexpectedDigest(digest.to_string())))
31 }
32}