icydb-primitives 0.93.2

IcyDB — A schema-first typed query engine and persistence runtime for Internet Computer canisters
Documentation
#[macro_export]
macro_rules! scalar_kind_registry_entries {
    ($macro:ident $(, @args $($args:tt)+ )?) => {
        $macro! {
            $(
                @args $($args)+;
            )?
            @entries
            (
                Account,
                Identifier,
                is_numeric_value = false,
                supports_numeric_coercion = false,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = true,
                is_storage_key_encodable = true
            ),
            (
                Blob,
                Blob,
                is_numeric_value = false,
                supports_numeric_coercion = false,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = false,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                Bool,
                Bool,
                is_numeric_value = false,
                supports_numeric_coercion = false,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                Date,
                Numeric,
                is_numeric_value = false,
                supports_numeric_coercion = false,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                Decimal,
                Numeric,
                is_numeric_value = true,
                supports_numeric_coercion = true,
                supports_arithmetic = true,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                Duration,
                Numeric,
                is_numeric_value = true,
                supports_numeric_coercion = true,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                Enum,
                Enum,
                is_numeric_value = false,
                supports_numeric_coercion = false,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                Float32,
                Numeric,
                is_numeric_value = true,
                supports_numeric_coercion = true,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                Float64,
                Numeric,
                is_numeric_value = true,
                supports_numeric_coercion = true,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                Int,
                Numeric,
                is_numeric_value = true,
                supports_numeric_coercion = true,
                supports_arithmetic = true,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = true,
                is_storage_key_encodable = true
            ),
            (
                Int128,
                Numeric,
                is_numeric_value = true,
                supports_numeric_coercion = true,
                supports_arithmetic = true,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                IntBig,
                Numeric,
                is_numeric_value = false,
                supports_numeric_coercion = false,
                supports_arithmetic = true,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                Principal,
                Identifier,
                is_numeric_value = false,
                supports_numeric_coercion = false,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = true,
                is_storage_key_encodable = true
            ),
            (
                Subaccount,
                Blob,
                is_numeric_value = false,
                supports_numeric_coercion = false,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = true,
                is_storage_key_encodable = true
            ),
            (
                Text,
                Textual,
                is_numeric_value = false,
                supports_numeric_coercion = false,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                Timestamp,
                Numeric,
                is_numeric_value = true,
                supports_numeric_coercion = true,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = true,
                is_storage_key_encodable = true
            ),
            (
                Uint,
                Numeric,
                is_numeric_value = true,
                supports_numeric_coercion = true,
                supports_arithmetic = true,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = true,
                is_storage_key_encodable = true
            ),
            (
                Uint128,
                Numeric,
                is_numeric_value = true,
                supports_numeric_coercion = true,
                supports_arithmetic = true,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                UintBig,
                Numeric,
                is_numeric_value = false,
                supports_numeric_coercion = false,
                supports_arithmetic = true,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = false,
                is_storage_key_encodable = false
            ),
            (
                Ulid,
                Identifier,
                is_numeric_value = false,
                supports_numeric_coercion = false,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = true,
                is_keyable = true,
                is_storage_key_encodable = true
            ),
            (
                Unit,
                Unit,
                is_numeric_value = false,
                supports_numeric_coercion = false,
                supports_arithmetic = false,
                supports_equality = true,
                supports_ordering = false,
                is_keyable = true,
                is_storage_key_encodable = true
            ),
        }
    };
}

#[macro_export]
macro_rules! scalar_kind_registry {
    ($macro:ident) => {
        $crate::scalar_kind_registry_entries!($macro)
    };
    ($macro:ident, $($args:tt)+) => {
        $crate::scalar_kind_registry_entries!($macro, @args $($args)+)
    };
}

macro_rules! metadata_from_registry {
    ( @args $kind:expr; @entries $( ($scalar:ident, $family:ident, is_numeric_value = $is_numeric:expr, supports_numeric_coercion = $supports_numeric_coercion:expr, supports_arithmetic = $supports_arithmetic:expr, supports_equality = $supports_equality:expr, supports_ordering = $supports_ordering:expr, is_keyable = $is_keyable:expr, is_storage_key_encodable = $is_storage_key_encodable:expr) ),* $(,)? ) => {
        match $kind {
            $(
                $crate::ScalarKind::$scalar => $crate::ScalarMetadata {
                    family: $crate::ScalarCoercionFamily::$family,
                    is_numeric_value: $is_numeric,
                    supports_numeric_coercion: $supports_numeric_coercion,
                    supports_arithmetic: $supports_arithmetic,
                    supports_equality: $supports_equality,
                    supports_ordering: $supports_ordering,
                    is_keyable: $is_keyable,
                    is_storage_key_encodable: $is_storage_key_encodable,
                },
            )*
        }
    };
}

macro_rules! all_kinds_from_registry {
    ( @entries $( ($scalar:ident, $family:ident, is_numeric_value = $is_numeric:expr, supports_numeric_coercion = $supports_numeric_coercion:expr, supports_arithmetic = $supports_arithmetic:expr, supports_equality = $supports_equality:expr, supports_ordering = $supports_ordering:expr, is_keyable = $is_keyable:expr, is_storage_key_encodable = $is_storage_key_encodable:expr) ),* $(,)? ) => {
        [ $( $crate::ScalarKind::$scalar ),* ]
    };
    ( @args $($ignore:tt)*; @entries $( ($scalar:ident, $family:ident, is_numeric_value = $is_numeric:expr, supports_numeric_coercion = $supports_numeric_coercion:expr, supports_arithmetic = $supports_arithmetic:expr, supports_equality = $supports_equality:expr, supports_ordering = $supports_ordering:expr, is_keyable = $is_keyable:expr, is_storage_key_encodable = $is_storage_key_encodable:expr) ),* $(,)? ) => {
        [ $( $crate::ScalarKind::$scalar ),* ]
    };
}