macro_rules! impl_scalar_capture_methods {
($($method:ident($ty:ty) => $variant:ident),* $(,)?) => {
$(
fn $method(self, v: $ty) -> Result<Self::Ok, Self::Error> {
self.value = Some(FieldScalarValue::$variant(v));
Ok(())
}
)*
};
}
macro_rules! impl_extractor_capture_methods {
($($method:ident($ty:ty) => $variant:ident),* $(,)?) => {
$(
fn $method(self, v: $ty) -> Result<Self::Ok, Self::Error> {
self.capture_value(FieldScalarValue::$variant(v))
}
)*
};
}
macro_rules! impl_key_reject_methods {
($($method:ident($($ty:ty),*)),* $(,)?) => {
$(
fn $method(self, $(_: $ty),*) -> Result<Self::Ok, Self::Error> {
Err(EvaluateError::UnsupportedType {
type_name: "Map key must be a string",
})
}
)*
};
}
mod extractor;
mod key;
mod list;
mod scalar_capture;
mod skip;
pub(crate) use extractor::FieldValueExtractorSerializer;
use crate::value::FieldScalarValue;
#[derive(Debug, Clone, Copy, PartialEq, Default)]
pub(crate) enum ExtractionMode {
#[default]
Scalar,
List,
}
pub(crate) fn wrap_in_options(value: FieldScalarValue, level: u8) -> FieldScalarValue {
let mut current = value;
for _ in 0..level {
current = FieldScalarValue::Option(Some(Box::new(current)));
}
current
}