// Copyright 2025 Gabriel Bjørnager Jensen.

#![doc(html_logo_url = "https://gitlab.com/bjoernager/multitype/-/raw/master/doc-icon.svg")]

//! Primitive type traits.
//!
//! Multitype is a crate for seamlessly generalising fundamental types via traits.
//!
//! Multitype provideds the `Uint`, `Int`, and `Float` traits to abstract over the equivalent primitive types.
//! These traits are intended to provide one-to-one copies of the interfaces that the primitive types define.
//!
//! Additionally, Multitype also provides the `Least16`, `Least32`, `Least64`, and `Least128` traits to allow abstraction over larger types.

#![no_std]

#![cfg_attr(feature = "f16",           feature(f16))]
#![cfg_attr(feature = "f128",          feature(f128))]
#![cfg_attr(feature = "unstable-docs", feature(doc_cfg))]

extern crate self as multitype;

#[cfg(feature = "alloc")]
extern crate alloc;

#[cfg(feature = "std")]
extern crate std;

mod array;
mod float;
mod int;
mod least;
mod std_float;
mod uint;

pub use array::Array;
pub use float::Float;
pub use int::Int;
pub use least::{
	Least128,
	Least16,
	Least32,
	Least64,
};
pub use uint::Uint;

#[cfg(feature = "std")]
pub use std_float::StdFloat;

//pub(crate) use array::SealedArray;
pub(crate) use float::SealedFloat;
pub(crate) use int::SealedInt;
//pub(crate) use least::{
//	SealedLeast128,
//	SealedLeast16,
//	SealedLeast32,
//	SealedLeast64,
//};
pub(crate) use uint::SealedUint;

#[cfg(feature = "std")]
pub(crate) use std_float::SealedStdFloat;
