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}