mod boolean;
mod bytes;
mod map_struct;
mod null;
mod number;
mod sequence;
mod shared;
mod string;
pub use boolean::BooleanContext;
pub use bytes::BytesContext;
pub use map_struct::MapStructContext;
pub use null::NullContext;
pub use number::NumberContext;
pub use sequence::SequenceContext;
pub use shared::{Counter, CountingSet};
pub use string::{SemanticExtractor, StringContext, SuspiciousStrings};
use serde::{Deserialize, Serialize};
use std::fmt::Debug;
use crate::{Coalesce, traits::Aggregate};
pub trait Context {
type Null: Aggregate<()> + Coalesce + Default;
type Boolean: Aggregate<bool> + Coalesce + Default;
type Integer: Aggregate<i128> + Coalesce + Default;
type Float: Aggregate<f64> + Coalesce + Default;
type String: Aggregate<str> + Coalesce + Default;
type Bytes: Aggregate<[u8]> + Coalesce + Default;
type Sequence: Aggregate<usize> + Coalesce + Default;
type Struct: Aggregate<[String]> + Coalesce + Default;
}
impl Context for () {
type Null = ();
type Boolean = ();
type Integer = ();
type Float = ();
type String = ();
type Bytes = ();
type Sequence = ();
type Struct = ();
}
#[derive(Debug, Clone, Copy, PartialEq, Default, Serialize, Deserialize)]
pub struct DefaultContext;
impl Context for DefaultContext {
type Null = NullContext;
type Boolean = BooleanContext;
type Integer = NumberContext<i128>;
type Float = NumberContext<f64>;
type String = StringContext;
type Bytes = BytesContext;
type Sequence = SequenceContext;
type Struct = MapStructContext;
}