Skip to main content

floe_core/
runtime.rs

1use crate::io::format::{self, InputAdapter, RejectedSinkAdapter};
2use crate::io::storage::CloudClient;
3use crate::io::write::sink_format::{sink_format as lookup_sink_format, SinkFormat};
4use crate::FloeResult;
5
6pub trait Runtime {
7    fn input_adapter(&self, format: &str) -> FloeResult<&'static dyn InputAdapter>;
8    fn sink_format(&self, format: &str) -> FloeResult<&'static dyn SinkFormat>;
9    fn rejected_sink_adapter(&self, format: &str) -> FloeResult<&'static dyn RejectedSinkAdapter>;
10    fn storage(&mut self) -> &mut CloudClient;
11}
12
13pub struct DefaultRuntime {
14    cloud: CloudClient,
15}
16
17impl DefaultRuntime {
18    pub fn new() -> Self {
19        Self {
20            cloud: CloudClient::new(),
21        }
22    }
23}
24
25impl Default for DefaultRuntime {
26    fn default() -> Self {
27        Self::new()
28    }
29}
30
31impl Runtime for DefaultRuntime {
32    fn input_adapter(&self, format: &str) -> FloeResult<&'static dyn InputAdapter> {
33        format::input_adapter(format)
34    }
35
36    fn sink_format(&self, format: &str) -> FloeResult<&'static dyn SinkFormat> {
37        lookup_sink_format(format)
38    }
39
40    fn rejected_sink_adapter(&self, format: &str) -> FloeResult<&'static dyn RejectedSinkAdapter> {
41        format::rejected_sink_adapter(format)
42    }
43
44    fn storage(&mut self) -> &mut CloudClient {
45        &mut self.cloud
46    }
47}