Skip to main content

floe_core/io/write/
accepted.rs

1use std::path::Path;
2
3use polars::prelude::DataFrame;
4
5use crate::io::format::{AcceptedSinkAdapter, AcceptedWriteOutput};
6use crate::io::storage::Target;
7use crate::{config, io, FloeResult};
8
9pub struct AcceptedWriteRequest<'a> {
10    pub target: &'a Target,
11    pub df: &'a mut DataFrame,
12    pub output_stem: &'a str,
13    pub temp_dir: Option<&'a Path>,
14    pub cloud: &'a mut io::storage::CloudClient,
15    pub resolver: &'a config::StorageResolver,
16    pub entity: &'a config::EntityConfig,
17    pub mode: config::WriteMode,
18}
19
20pub trait AcceptedWriter: Send + Sync {
21    fn write(&self, request: AcceptedWriteRequest<'_>) -> FloeResult<AcceptedWriteOutput>;
22}
23
24pub struct AdapterAcceptedWriter<'a> {
25    adapter: &'a dyn AcceptedSinkAdapter,
26}
27
28impl<'a> AdapterAcceptedWriter<'a> {
29    pub fn new(adapter: &'a dyn AcceptedSinkAdapter) -> Self {
30        Self { adapter }
31    }
32}
33
34impl AcceptedWriter for AdapterAcceptedWriter<'_> {
35    fn write(&self, request: AcceptedWriteRequest<'_>) -> FloeResult<AcceptedWriteOutput> {
36        self.adapter.write_accepted(
37            request.target,
38            request.df,
39            request.mode,
40            request.output_stem,
41            request.temp_dir,
42            request.cloud,
43            request.resolver,
44            request.entity,
45        )
46    }
47}
48
49pub fn write_with_adapter(
50    adapter: &dyn AcceptedSinkAdapter,
51    request: AcceptedWriteRequest<'_>,
52) -> FloeResult<AcceptedWriteOutput> {
53    AdapterAcceptedWriter::new(adapter).write(request)
54}