#[macro_use]
mod macros;
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum ScalarKind {
Account,
Blob,
Bool,
Date,
Decimal,
Duration,
Enum,
Float32,
Float64,
Int,
Int128,
IntBig,
Principal,
Subaccount,
Text,
Timestamp,
Uint,
Uint128,
UintBig,
Ulid,
Unit,
}
impl ScalarKind {
#[must_use]
pub const fn metadata(self) -> ScalarMetadata {
scalar_kind_registry!(metadata_from_registry, self)
}
#[must_use]
pub const fn coercion_family(self) -> ScalarCoercionFamily {
self.metadata().family
}
#[must_use]
pub const fn is_numeric_value(self) -> bool {
self.metadata().is_numeric_value
}
#[must_use]
pub const fn supports_numeric_coercion(self) -> bool {
self.metadata().supports_numeric_coercion
}
#[must_use]
pub const fn supports_arithmetic(self) -> bool {
self.metadata().supports_arithmetic
}
#[must_use]
pub const fn supports_equality(self) -> bool {
self.metadata().supports_equality
}
#[must_use]
pub const fn supports_ordering(self) -> bool {
self.metadata().supports_ordering
}
#[must_use]
pub const fn is_keyable(self) -> bool {
self.metadata().is_keyable
}
#[must_use]
pub const fn is_storage_key_encodable(self) -> bool {
self.metadata().is_storage_key_encodable
}
}
#[derive(Clone, Copy, Debug, Eq, PartialEq)]
#[expect(clippy::struct_excessive_bools)]
pub struct ScalarMetadata {
family: ScalarCoercionFamily,
is_numeric_value: bool,
supports_numeric_coercion: bool,
supports_arithmetic: bool,
supports_equality: bool,
supports_ordering: bool,
is_keyable: bool,
is_storage_key_encodable: bool,
}
impl ScalarMetadata {
#[must_use]
pub const fn family(self) -> ScalarCoercionFamily {
self.family
}
#[must_use]
pub const fn is_numeric_value(self) -> bool {
self.is_numeric_value
}
#[must_use]
pub const fn supports_numeric_coercion(self) -> bool {
self.supports_numeric_coercion
}
#[must_use]
pub const fn supports_arithmetic(self) -> bool {
self.supports_arithmetic
}
#[must_use]
pub const fn supports_equality(self) -> bool {
self.supports_equality
}
#[must_use]
pub const fn supports_ordering(self) -> bool {
self.supports_ordering
}
#[must_use]
pub const fn is_keyable(self) -> bool {
self.is_keyable
}
#[must_use]
pub const fn is_storage_key_encodable(self) -> bool {
self.is_storage_key_encodable
}
}
#[derive(Clone, Copy, Debug, Eq, Hash, PartialEq)]
pub enum ScalarCoercionFamily {
Numeric,
Textual,
Identifier,
Enum,
Blob,
Bool,
Unit,
}
pub const ALL_SCALAR_KINDS: [ScalarKind; 21] = scalar_kind_registry!(all_kinds_from_registry);