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
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 catalogs: &'a config::CatalogResolver,
17 pub entity: &'a config::EntityConfig,
18 pub mode: config::WriteMode,
19}
20
21pub trait AcceptedWriter: Send + Sync {
22 fn write(&self, request: AcceptedWriteRequest<'_>) -> FloeResult<AcceptedWriteOutput>;
23}
24
25pub struct AdapterAcceptedWriter<'a> {
26 adapter: &'a dyn AcceptedSinkAdapter,
27}
28
29impl<'a> AdapterAcceptedWriter<'a> {
30 pub fn new(adapter: &'a dyn AcceptedSinkAdapter) -> Self {
31 Self { adapter }
32 }
33}
34
35impl AcceptedWriter for AdapterAcceptedWriter<'_> {
36 fn write(&self, request: AcceptedWriteRequest<'_>) -> FloeResult<AcceptedWriteOutput> {
37 self.adapter.write_accepted(
38 request.target,
39 request.df,
40 request.mode,
41 request.output_stem,
42 request.temp_dir,
43 request.cloud,
44 request.resolver,
45 request.catalogs,
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}