use crate::line_buffer::{DirectWrite, TruncatingWrite};
use super::line_buffer::LineBuffer;
pub(crate) trait LineFactory {
type Line<'a>: Line + 'a;
fn create_line(buf: &mut LineBuffer) -> Self::Line<'_>;
}
pub(crate) struct FailOnUnfit;
pub(crate) struct TruncateOnUnfit;
impl LineFactory for FailOnUnfit {
type Line<'a> = DirectWrite<'a>;
fn create_line(buf: &mut LineBuffer) -> Self::Line<'_> {
buf.direct_write()
}
}
impl LineFactory for TruncateOnUnfit {
type Line<'a> = TruncatingWrite<'a>;
fn create_line(buf: &mut LineBuffer) -> Self::Line<'_> {
buf.truncating_write()
}
}
pub(crate) trait Line {
fn meta_mut(&mut self) -> &mut String;
fn payload_mut(&mut self) -> &mut String;
fn fields_mut(&mut self) -> &mut String;
fn try_commit(self) -> bool;
}