reifydb-type 0.4.11

Core type system and value representations for ReifyDB
Documentation
// SPDX-License-Identifier: Apache-2.0
// Copyright (c) 2025 ReifyDB

use std::fmt::{Debug, Display};

use super::{int::Int, uint::Uint};
use crate::value::{
	date::Date,
	datetime::DateTime,
	decimal::Decimal,
	duration::Duration,
	identity::IdentityId,
	time::Time,
	to_value::ToValue,
	r#type::get::GetType,
	uuid::{Uuid4, Uuid7},
};

pub trait IsNumber: Display + Clone + Debug + PartialEq + PartialOrd + GetType + Default + ToValue + 'static {}
pub trait IsTemporal: Display + Clone + Debug + PartialEq + PartialOrd + GetType + Default + ToValue + 'static {}
pub trait IsUuid: Display + Clone + Debug + PartialEq + PartialOrd + GetType + Default + ToValue + 'static {}

pub trait IsFloat: IsNumber {}

impl IsNumber for f32 {}
impl IsFloat for f32 {}

impl IsNumber for f64 {}
impl IsFloat for f64 {}

pub trait IsInt: IsNumber {}

impl IsNumber for i8 {}
impl IsInt for i8 {}

impl IsNumber for i16 {}
impl IsInt for i16 {}

impl IsNumber for i32 {}
impl IsInt for i32 {}

impl IsNumber for i64 {}
impl IsInt for i64 {}

impl IsNumber for i128 {}
impl IsInt for i128 {}

pub trait IsUint: IsNumber {}

impl IsNumber for u8 {}
impl IsUint for u8 {}

impl IsNumber for u16 {}
impl IsUint for u16 {}

impl IsNumber for u32 {}
impl IsUint for u32 {}

impl IsNumber for u64 {}
impl IsUint for u64 {}

impl IsNumber for u128 {}
impl IsUint for u128 {}

impl IsNumber for Int {}
impl IsInt for Int {}

impl IsNumber for Uint {}
impl IsUint for Uint {}

impl IsNumber for Decimal {}
impl IsFloat for Decimal {}

pub trait IsDate: IsTemporal {}
pub trait IsTime: IsTemporal {}

impl IsTemporal for Date {}
impl IsDate for Date {}

impl IsTemporal for DateTime {}
impl IsDate for DateTime {}
impl IsTime for DateTime {}

impl IsTemporal for Time {}
impl IsTime for Time {}

impl IsTemporal for Duration {}

impl IsUuid for Uuid4 {}
impl IsUuid for Uuid7 {}
impl IsUuid for IdentityId {}