soma/problem/configs/
binary.rs1use std::path::{Path, PathBuf};
2
3use serde::{Deserialize, Serialize};
4
5use super::common::{FileEntry, FilePermissions, SolidFileEntry};
6use crate::prelude::*;
7
8#[derive(Deserialize)]
9pub struct BinaryConfig {
10 os: String,
11 cmd: String,
12 executable: Vec<FileEntry>,
13 readonly: Vec<FileEntry>,
14}
15
16#[derive(Serialize)]
17pub struct SolidBinaryConfig {
18 os: String,
19 cmd: String,
20 file_entries: Vec<SolidFileEntry>,
21}
22
23impl BinaryConfig {
24 pub fn executable(&self) -> &Vec<FileEntry> {
25 &self.executable
26 }
27
28 pub fn readonly(&self) -> &Vec<FileEntry> {
29 &self.readonly
30 }
31
32 pub fn solidify(&self, work_dir: impl AsRef<Path>) -> SomaResult<SolidBinaryConfig> {
33 let executable = self
34 .executable
35 .iter()
36 .map(|file| file.solidify(&work_dir, FilePermissions::Executable));
37 let readonly = self
38 .readonly
39 .iter()
40 .map(|file| file.solidify(&work_dir, FilePermissions::ReadOnly));
41 let file_entries = executable.chain(readonly).collect::<SomaResult<Vec<_>>>()?;
42
43 Ok(SolidBinaryConfig {
44 os: self.os.clone(),
45 cmd: self.cmd.clone(),
46 file_entries,
47 })
48 }
49}
50
51impl SolidBinaryConfig {
52 pub fn path_maps(&self) -> impl Iterator<Item = (&PathBuf, &PathBuf)> + '_ {
53 self.file_entries.iter().map(SolidFileEntry::path_map)
54 }
55}