use arrow::datatypes::{DataType, Field, Schema};
use datafusion_common::Result;
use datafusion_expr_common::accumulator::Accumulator;
use datafusion_physical_expr_common::{
physical_expr::PhysicalExpr, sort_expr::PhysicalSortExpr,
};
use std::sync::Arc;
#[derive(Debug)]
pub struct AccumulatorArgs<'a> {
pub return_type: &'a DataType,
pub schema: &'a Schema,
pub ignore_nulls: bool,
pub ordering_req: &'a [PhysicalSortExpr],
pub is_reversed: bool,
pub name: &'a str,
pub is_distinct: bool,
pub exprs: &'a [Arc<dyn PhysicalExpr>],
}
pub type AccumulatorFactoryFunction =
Arc<dyn Fn(AccumulatorArgs) -> Result<Box<dyn Accumulator>> + Send + Sync>;
pub struct StateFieldsArgs<'a> {
pub name: &'a str,
pub input_types: &'a [DataType],
pub return_type: &'a DataType,
pub ordering_fields: &'a [Field],
pub is_distinct: bool,
}