use std::collections::HashMap;
use std::io;
use crate::models::decoders::json::builder::{ColumnBuilder, TypeMismatchPolicy};
pub trait JsonRowDecoder {
fn decode_rows(
&mut self,
input: &mut [u8],
builders: &mut [ColumnBuilder],
field_map: &HashMap<&str, usize>,
policy: TypeMismatchPolicy,
) -> io::Result<usize>;
}
#[inline]
pub fn handle_type_mismatch(
policy: TypeMismatchPolicy,
row: usize,
field: &str,
detail: &str,
) -> io::Result<MismatchAction> {
match policy {
TypeMismatchPolicy::Error => Err(io::Error::new(
io::ErrorKind::InvalidData,
format!("type mismatch at row {row} field '{field}': {detail}"),
)),
TypeMismatchPolicy::Coerce => Ok(MismatchAction::Coerce),
TypeMismatchPolicy::Null => Ok(MismatchAction::PushNull),
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MismatchAction {
Coerce,
PushNull,
}