lilliput_core/config/
float.rs

1pub use lilliput_float::PackedFloatValidator;
2
3use super::PackingMode;
4
5/// Validation for float-packing.
6#[derive(Default, Clone, PartialEq, Debug)]
7pub struct PackedFloatValidation {
8    /// Validation for float-packing of `f32` values.
9    pub f32: PackedFloatValidator<f32>,
10    /// Validation for float-packing of `f64` values.
11    pub f64: PackedFloatValidator<f64>,
12}
13
14impl PackedFloatValidation {
15    /// Sets validation for float-packing of `f32` values, returning `self`.
16    pub fn with_f32(mut self, validator: PackedFloatValidator<f32>) -> Self {
17        self.f32 = validator;
18        self
19    }
20
21    /// Sets validation for float-packing of `f64` values, returning `self`.
22    pub fn with_f64(mut self, validator: PackedFloatValidator<f64>) -> Self {
23        self.f64 = validator;
24        self
25    }
26
27    /// Sets validation for float-packing values based on relative maximum epsilon, returning `self`.
28    pub fn with_relative(self, max_eps: f64) -> Self {
29        self.with_f32(PackedFloatValidator::Relative(max_eps as f32))
30            .with_f64(PackedFloatValidator::Relative(max_eps))
31    }
32
33    /// Sets validation for float-packing values based on absolute maximum epsilon, returning `self`.
34    pub fn with_absolute(self, max_eps: f64) -> Self {
35        self.with_f32(PackedFloatValidator::Absolute(max_eps as f32))
36            .with_f64(PackedFloatValidator::Absolute(max_eps))
37    }
38}
39
40/// Configuration used for encoding integer values.
41#[cfg_attr(any(test, feature = "testing"), derive(proptest_derive::Arbitrary))]
42#[derive(Default, Clone, PartialEq, Debug)]
43pub struct FloatEncoderConfig {
44    /// Packing mode for encoding.
45    pub packing: PackingMode,
46    #[cfg_attr(
47        any(test, feature = "testing"),
48        proptest(value = "PackedFloatValidation::default()")
49    )]
50    /// Validation for float-packing.
51    pub validation: PackedFloatValidation,
52}
53
54impl FloatEncoderConfig {
55    /// Sets packing-modes to `packing`, returning `self`.
56    pub fn with_packing(mut self, packing: PackingMode) -> Self {
57        self.packing = packing;
58        self
59    }
60
61    /// Sets float-validation to `validation`, returning `self`.
62    pub fn with_validation(mut self, validation: PackedFloatValidation) -> Self {
63        self.validation = validation;
64        self
65    }
66}