1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#[cfg(not(feature = "mesalock_sgx"))]
use std::fs::File;
use std::io;
#[cfg(feature = "mesalock_sgx")]
use std::untrusted::fs::File;
use teaclave_types::StagedFiles;
use teaclave_types::TeaclaveRuntime;
pub struct RawIoRuntime {
input_files: StagedFiles,
output_files: StagedFiles,
}
impl RawIoRuntime {
pub fn new(input_files: StagedFiles, output_files: StagedFiles) -> RawIoRuntime {
RawIoRuntime {
input_files,
output_files,
}
}
}
impl TeaclaveRuntime for RawIoRuntime {
fn open_input(&self, identifier: &str) -> anyhow::Result<Box<dyn io::Read>> {
let file_info = self
.input_files
.get(identifier)
.ok_or_else(|| anyhow::anyhow!("Invalid input file identifier."))?;
log::debug!("open_input: {:?}", file_info.path);
let f = File::open(&file_info.path)?;
Ok(Box::new(f))
}
fn create_output(&self, identifier: &str) -> anyhow::Result<Box<dyn io::Write>> {
let file_info = self
.output_files
.get(identifier)
.ok_or_else(|| anyhow::anyhow!("Invalid output file identifier"))?;
log::debug!("create_output: {:?}", file_info.path);
let f = File::create(&file_info.path)?;
Ok(Box::new(f))
}
}