Traits list
Here is the exhaustive list of Mélodium traits.
Some traits are grouped by family, as they behave the same way. The behavior is then explained with general meaning, and each individual trait description exposes some specificities.
Infaillible conversions
Infaillible conversions designates conversions that are guaranteed to succeed, for which for every X initial state there exist a Y result state.
While these conversions are guaranteed to succeed, they are not guaranteed to be reversible. As example,
u8
implementsToI64
, buti64
does not implementsToU8
.
These traits are mostly useful trough treatments and functions of the conv
area.
ToI8
Type is able to convert itself into a i8
value.
Implemented by |
---|
i8 |
ToI16
Type is able to convert itself into a i16
value.
Implemented by |
---|
i8 |
u8 |
ToI32
Type is able to convert itself into a i32
value.
Implemented by |
---|
i8 |
i16 |
i32 |
u8 |
u16 |
ToI64
Type is able to convert itself into a i64
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
u8 |
u16 |
u32 |
ToI128
Type is able to convert itself into a i128
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
ToU8
Type is able to convert itself into a u8
value.
Implemented by |
---|
u8 |
byte |
ToU16
Type is able to convert itself into a u16
value.
Implemented by |
---|
u8 |
u16 |
ToU32
Type is able to convert itself into a u32
value.
Implemented by |
---|
u8 |
u16 |
u32 |
ToU64
Type is able to convert itself into a u64
value.
Implemented by |
---|
u8 |
u16 |
u32 |
u64 |
ToU128
Type is able to convert itself into a u128
value.
Implemented by |
---|
u8 |
u16 |
u32 |
u64 |
u128 |
ToF32
Type is able to convert itself into a f32
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
ToF64
Type is able to convert itself into a f64
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
ToBool
Type is able to convert itself into a bool
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
bool |
byte |
ToByte
Type is able to convert itself into a byte
value.
Implemented by |
---|
u8 |
bool |
byte |
ToChar
Type is able to convert itself into a char
value.
Implemented by |
---|
char |
ToString
Type is able to convert itself into a string
value.
While it is useful to have a conversion to
string
for a type, it should not be considered as a “readable” version of the value, and so not be confused withDisplay
trait, that is especially designed for this purpose.
Implemented by |
---|
void |
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
bool |
byte |
char |
string |
Faillible conversions
Faillible conversions designates conversions that are possible without being guaranteed to succeed.
Those conversions are useful to get an Option<T>
result, where T
is the target type, containing a value if conversion succeed, or none if it cannot be done.
These traits are mostly useful trough treatments and functions of the conv
area.
A general rule is that when a type implements a
To*
trait, it also does for itsTryTo*
counterpart.
TryToI8
Type can try to convert itself into a i8
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
TryToI16
Type can try to convert itself into a i16
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
TryToI32
Type can try to convert itself into a i32
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
TryToI64
Type can try to convert itself into a i64
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
TryToI128
Type can try to convert itself into a i128
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
TryToU8
Type can try to convert itself into a u8
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
TryToU16
Type can try to convert itself into a u16
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
TryToU32
Type can try to convert itself into a u32
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
TryToU64
Type can try to convert itself into a u64
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
TryToU128
Type can try to convert itself into a u128
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
TryToF32
Type can try to convert itself into a f32
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
TryToF64
Type can try to convert itself into a f64
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
TryToBool
Type can try to convert itself into a bool
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
bool |
byte |
TryToByte
Type can try to convert itself into a byte
value.
Implemented by |
---|
u8 |
bool |
byte |
TryToChar
Type can try to convert itself into a char
value.
Implemented by |
---|
char |
TryToString
Type can try to convert itself into a string
value.
Implemented by |
---|
void |
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
bool |
byte |
char |
string |
Saturating conversions
Saturating conversions are specific kind of conversions where a type can try to convert itself into another one, and instead of failing the conversion if its value cannot be rendered into the target type, push to the closest bound of that type according to initial value.
This kind of trait exists to target numeric types.
SaturatingToI8
Type can make a saturating conversion to i8
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
SaturatingToI16
Type can make a saturating conversion to i16
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
SaturatingToI32
Type can make a saturating conversion to i32
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
SaturatingToI64
Type can make a saturating conversion to i64
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
SaturatingToI128
Type can make a saturating conversion to i128
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
SaturatingToU8
Type can make a saturating conversion to u8
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
SaturatingToU16
Type can make a saturating conversion to u16
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
SaturatingToU32
Type can make a saturating conversion to u32
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
SaturatingToU64
Type can make a saturating conversion to u64
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
SaturatingToU128
Type can make a saturating conversion to u128
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
SaturatingToF32
Type can make a saturating conversion to f32
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
SaturatingToF64
Type can make a saturating conversion to f64
value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
Bounded
The type have minimum and maximum limits.
This trait is mostly useful trough functions of the types
area.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
byte |
Binary
Type can be used for meaningful mathematical binary operations.
This trait is mostly useful trough treatments and functions of the bin
area.
Implemented by |
---|
bool |
byte |
Signed
Type is signed, meaning it can have negative values.
This trait is mostly useful trough treatments and functions of the num
area.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
f32 |
f64 |
Float
Type represent floating-point values, and is able to proceed to floating-point arithmetic.
This trait is mostly useful trough treatments and functions of the float
area.
Implemented by |
---|
f32 |
f64 |
PartialEquality
Type can be compared to itself and tell wether both values are equal or not.
PartialEquality
does not require a full equivalence between all the value of a type.
As example, for f32
and f64
, NaN
is not equal to itself. As such, those types implements PartialEquality
but not Equality
.
This trait is mostly useful trough treatments and functions of the ops
area.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
bool |
byte |
char |
string |
Equality
Type can be compared to itself and tell wether both values are equal or not.
Equality
require a full equivalence between all the value of a type, meaning any X value is always equal to itself and always different from any other.
This trait is mostly useful trough treatments and functions of the ops
area.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
bool |
byte |
char |
string |
PartialOrder
Type implements partial order, meaning values of this type can be compared in a way telling if one is greater or lesser to another, strictly or not.
This trait is mostly useful trough treatments and functions of the ops
area.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
bool |
byte |
char |
string |
Order
Type implements total order, meaning values of this type can be compared, and absolute minimums and maximums in a set of those values can be found.
This trait is mostly useful trough treatments and functions of the ops
area.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
bool |
byte |
char |
string |
Basic arithmetic
Those traits corresponds to basic arithmetic operations, that are guaranteed to give a result, while that one may not be meaningful in some cases.
Those operations can most notably be subject to overflow, meaning the result value of an operation cannot fit into the type on which it is applied.
This trait is mostly useful trough treatments and functions of the num
area.
Add
Type can proceed to addition between two values.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
Sub
Type can proceed to substraction of two values.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
Mul
Type can proceed to multiplication of two values.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
Div
Type can proceed to division of a value by another.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
Rem
Type can proceed to division of a value by another and give the remainder.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
Neg
Type can negates its values.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
f32 |
f64 |
Pow
Type can elevates its values by an exponent.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
Euclid
Type can proceed to euclidian division of a value by another.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
Checked arithmetic
Those traits corresponds to basic arithmetic operations, that may have meaningless result.
Those operations can avoid overflows, as the result value of an operation that cannot fit into the type is ignored.
This trait is mostly useful trough treatments and functions of the num
area.
CheckedAdd
Type can proceed to addition between two values and avoid meaningless results.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
CheckedSub
Type can proceed to substraction of two values and avoid meaningless results.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
CheckedMul
Type can proceed to multiplication of two values and avoid meaningless results.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
CheckedDiv
Type can proceed to division of a value by another and avoid meaningless results.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
CheckedRem
Type can proceed to division of a value by another and give the remainder, while avoiding meaningless results.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
CheckedNeg
Type can negates its values and avoid meaningless results.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
CheckedPow
Type can elevates its values by an exponent and avoid meaningless results.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
CheckedEuclid
Type can proceed to euclidian division of a value by another and avoid meaningless results.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
Saturating arithmetic
Those traits corresponds to basic arithmetic operations, that saturates the value to the closest bound to truth if the result cannot fit into the type.
This trait is mostly useful trough treatments and functions of the num
area.
SaturatingAdd
Type can proceed to addition between two values, and bound to minimum or maximum value if addition result is out of range.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
SaturatingSub
Type can proceed to substraction of two values, and bound to minimum or maximum value if substraction result is out of range.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
SaturatingMul
Type can proceed to multiplication of two values, and bound to minimum or maximum value if multiplication result is out of range.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
Wrapping arithmetic
Those traits corresponds to basic arithmetic operations, that wraps on purpose when the operation result goes out of range for the subject type.
This trait is mostly useful trough treatments and functions of the num
area.
WrappingAdd
Type can proceed to addition between two values, and wrap over its value range if addition exceeds type boundaries.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
WrappingSub
Type can proceed to substraction of two values, and wrap over its value range if substraction exceeds type boundaries.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
WrappingMul
Type can proceed to multiplication of two values, and wrap over its value range if multiplication exceeds type boundaries.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
WrappingNeg
Type can negates its values, and wrap over its value range if negation exceeds type boundaries.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
Hash
Type is subject to hash, and so can be used as key to reference data.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
bool |
byte |
char |
string |
Serialize
Type implements serialization, meaning it can be turned into linear data and send out from a program.
Implemented by |
---|
void |
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
bool |
byte |
char |
string |
Deserialize
Type implements deserialization, meaning it can be received from outside of a program and parsed to build a value.
Implemented by |
---|
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
bool |
byte |
char |
string |
Display
Type can be rendered as human readable string and possibly displayed to users in a way making sense for them.
Display
trait is different to theToString
trait as it does not have the same functionnal purpose.ToString
is expected to be a technical conversion of data, whileDisplay
is meant to expose it to human eyes.
Implemented by |
---|
void |
i8 |
i16 |
i32 |
i64 |
i128 |
u8 |
u16 |
u32 |
u64 |
u128 |
f32 |
f64 |
bool |
byte |
char |
string |