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