Expand description
Type-safe primitives for constrained and reliability-oriented values.
reliakit-primitives provides small owned wrapper types for values that
should satisfy common constraints before they move through an application or
library boundary.
The crate is useful when a public API should accept a validated value instead
of an unchecked String, integer, or float. Constructors validate once at the
boundary and then carry the invariant in the type.
The crate has no dependencies and forbids unsafe code.
§Examples
Basic service configuration:
use reliakit_primitives::{NonEmptyStr, Port};
fn configure(name: NonEmptyStr, port: Port) {
assert_eq!(name.as_str(), "api");
assert_eq!(port.get(), 8080);
}
let name = NonEmptyStr::new("api")?;
let port = Port::new(8080)?;
configure(name, port);Text and structured values:
use reliakit_primitives::{Email, HumanDuration, HttpUrl, SemVer};
let contact = Email::new("ops@example.com")?;
let healthcheck = HttpUrl::new("https://example.com/health")?;
let version = SemVer::parse("1.2.3-beta.1")?;
let timeout = HumanDuration::parse("30s")?;
assert_eq!(contact.domain(), "example.com");
assert!(healthcheck.is_https());
assert!(version.is_pre_release());
assert_eq!(timeout.as_secs(), 30);§Feature flags
stdenablesstd::error::ErrorforPrimitiveErrorand is enabled by default.allocenables allocation-backed types withoutstd.
§no_std
The crate supports no_std when default features are disabled and alloc is
enabled for string-backed and vector-backed primitives.
Re-exports§
pub use bounded::BoundedStr;pub use collections::NonEmptyVec;pub use duration::HumanDuration;pub use error::PrimitiveError;pub use error::PrimitiveResult;pub use non_empty::NonEmptyStr;pub use numeric::ByteSize;pub use numeric::Percent;pub use numeric::PercentageF64;pub use numeric::Port;pub use numeric::PositiveFloat;pub use numeric::PositiveInt;pub use semver::SemVer;pub use text::Email;pub use text::HexString;pub use text::HttpUrl;pub use text::Slug;pub use uuid::Uuid;