|0.5.2||Dec 22, 2022|
|0.5.1||Oct 14, 2022|
|0.5.0||Aug 19, 2022|
|0.4.4||Apr 12, 2021|
|0.1.0||Mar 18, 2021|
#100 in Rust patterns
21,610 downloads per month
Used in 15 crates (7 directly)
Type conversion, success expected
This library exists to make fallible numeric type conversions easy, without
resorting to the
From, but supports fallible conversions
CastApproxsupport fallible, approximate conversion
CastFloatare similar, providing precise control over rounding
If you are wondering "why not just use
as", there are a few reasons:
- integer conversions may silently truncate or sign-extend which does not preserve value
- prior to Rust 1.45.0 float-to-int conversions were not fully defined; since this version they use saturating conversion (NaN converts to 0)
- you want some assurance (at least in debug builds) that the conversion will preserve values correctly
Why might you not want to use this library?
- You want saturating / truncating / other non-value-preserving conversion
- You want to convert non-numeric types (
Fromsupports a lot more conversions than
- You want a thoroughly tested library (we're not quite there yet)
All traits support two methods:
try_*methods return a
Resultand always fail if the correct conversion is not possible
- other methods may panic or return incorrect results
In debug builds, methods not returning
Result must panic on failure. As
with the overflow checks on Rust's standard integer arithmetic, this is
considered a tool for finding logic errors. In release builds, these methods
are permitted to return defined but incorrect results similar to the
always_assert feature flag is set, assertions will be turned on in
all builds. Some additional feature flags are available for finer-grained
Performance is "good enough that it hasn't been a concern".
In debug builds and when
always_assert is enabled, the priority is testing
but overhead should be small.
In release builds without
conv* methods should reduce to
x as T (with necessary additions for rounding).
When the crate's default features are disabled (and
std is not enabled)
then the library supports
no_std. In this case,
CastFloat are only available if the
libm optional dependency is
MSRV and no_std
The Minumum Supported Rust Version is 1.53.0 (
IntoIterator for [T; N]).
std support is required. With default features disabled
is supported, but the
CastFloat traits are unavailable.
libm feature will re-enable these traits.
Copyright and Licence
The COPYRIGHT file includes a list of contributors who claim copyright on this project. This list may be incomplete; new contributors may optionally add themselves to this list.
The easy-cast library is published under the terms of the Apache License, Version 2.0. You may obtain a copy of this licence from the LICENSE file or on the following webpage: https://www.apache.org/licenses/LICENSE-2.0