Crates.io | partial-default |
lib.rs | partial-default |
version | 0.1.0 |
source | src |
created_at | 2023-10-25 23:35:47.463005 |
updated_at | 2023-10-25 23:35:47.463005 |
description | Provides PartialDefault, a trait similar to Default but with fewer guarantees |
homepage | |
repository | https://github.com/signalapp/partial-default |
max_upload_size | |
id | 1013812 |
size | 42,444 |
[PartialDefault
] is a trait for giving a type a non-useful default value.
The standard Default
trait documents its purpose as providing a "useful" default value. However, some types (such as a Credential) don't have meaningful defaults, and yet there are still uses for a known-initialized value:
Deserializer::deserialize_in_place
, which is generally more efficient than the usual deserialize
ConditionallySelectable::conditional_assign
, for repeated assignments with at least one successPartialDefault
satisfies this niche. A type that implements PartialDefault
can provide a value that is safe to drop or assign over, but promises nothing else about that value. It provides a derive macro (opt-in, with the derive
feature) and is no_std
compatible.
PartialDefault
was made to support libsignal, but is available for general use under the AGPLv3. Still, this is meant to be a low-maintenance crate; do not expect active support or progress on feature requests.
Signal does accept external contributions to this project; however, signing a CLA (Contributor License Agreement) is required for all contributions.
Copyright 2023 Signal Messenger, LLC.
The partial-default-derive
crate contains code adapted from the rust-smart-default
crate, Copyright (c) 2017 Idan Arye, under the MIT license.