use super::format::DataFormat;
use crate::Result;
use crate::model::{AppendRowsRequest, FinalizeWriteStreamResponse};
use crate::write::generated::gapic_storage::client::BigQueryWrite;
use crate::write::runner::Runner;
use crate::write::transport::Transport;
use std::sync::Arc;
#[derive(Debug)]
pub(crate) struct BaseWriter<F> {
pub(crate) runner: Runner,
pub(crate) write_stream: String,
pub(crate) format: F,
pub(crate) client: BigQueryWrite,
}
impl<F> BaseWriter<F>
where
F: DataFormat,
{
pub(crate) fn new(inner: Arc<Transport>, write_stream: String, format: F) -> Self {
let runner = Runner::new(inner.clone());
let client = BigQueryWrite::from_stub::<Transport>(inner);
Self {
runner,
write_stream,
format,
client,
}
}
pub(crate) fn append_request(&self, rows: F::Rows) -> AppendRowsRequest {
self.format.make_request(&self.write_stream, rows)
}
pub(crate) async fn finalize(&self) -> Result<FinalizeWriteStreamResponse> {
self.client
.finalize_write_stream()
.set_name(&self.write_stream)
.send()
.await
}
}