Crate amplify[][src]

Expand description

Amplifying Rust language capabilities: multiple generic trait implementations, type wrappers, derive macros.

Minimum supported rust compiler version (MSRV): 1.46 (stable channel)

Re-exports

pub use crate::strategy::Holder;

Modules

flags

Types for building flag-based APIs and functionality

hex

Hex encoding and decoding

num

Custom-sized numeric types

strategy

This is a trick for rust compiler helping to distinguish types implementing mutually-exclusive traits (required until negative trait impls will be there) Implemented after concept by Martin Habovštiak martin.habovstiak@gmail.com

Macros

bmap

Macro for creating [BTreeMap] in the same manner as vec! is used for Vec:

bset

Macro for creating [BTreeSet] in the same manner as vec! is used for Vec:

default

Shorthand for Default::default()

dumb

Shorthand for DumbDefault::dumb_default()

empty

This macro allows more semantically-clear code (which can be used especially with structure initialization), indicating that instead of type value we are generating empty collection types

list

Macro for creating [LinkedList] in the same manner as vec! is used for Vec:

map

Macro for creating [HashMap] in the same manner as vec! is used for Vec:

none

This macro allows more semantically-clear code (which can be used especially with structure initialization), indicating that instead of type value we are generating no value at all (empty collection or data structure filled with information indicating absence of data)

s

Macro for quick & simple &str -> String conversion:

set

Macro for creating [HashSet] in the same manner as vec! is used for Vec:

zero

This macro allows more semantically-clear code (which can be used especially with structure initialization), indicating that instead of type value we are generating zero values (int types or byte slices filled with zeros)

Structs

IoError

Copyable & cloneable I/O error type represented by the error kind function.

Traits

AsAny

Trait AsAny allows simple conversion of any type into a generic “thick” pointer &dyn Any (see ::core::any::Any), that can be later converted back to the original type with a graceful failing for all other conversions. For simple conversions it is recommended to use #[derive(AsAny)] macro from amplify_derive crate (see amplify_derive::AsAny).

Bipolar

Trait for splittable streams and other types, which can be separated into some two types ([Left], [Right]), like a reader and writer streams.

DumbDefault

Used as an alternative to default for test and prototyping purposes, when a type can’t have a default value, but you need to generate some dumb data.

Wrapper

Trait defining wrapped types (“newtypes” in rust terminology). Wrapped types are used for allowing implemeting foreign traits to foreign types: https://doc.rust-lang.org/stable/rust-by-example/generics/new_types.html

Derive Macros

AsAny

Trait [amplify::AsAny] allows simple conversion of any type into a generic “thick” pointer &dyn Any (see ::core::any::Any), that can be later converted back to the original type with a graceful failing for all other conversions. AsAny derive macro allows to implement this trait for arbitrary time without much hussle:

Display

Usage

Error

Error derive macro works to the full extend only when other derive macros are used. With #[derive(Display)] and [display(doc_comments)] it uses doc comments for generating error descriptions; with #[derive(From)] it may automatically implement transofrations from other error types.

From

Implements From trait for the whole entity and/or its separate fields. Works well with #[derive(Error)] and, in many cases may require Default implementation (for details, pls see Examples below)

Getters

Derives getter methods for structures. The return type and naming of the methods depends on the provided attribute arguments.

Wrapper

Creates rust new type wrapping existing type. Can be used in sturctures containing multiple named or unnamed fields; in this case the field you’d like to wrap should be marked with #[wrap] attribute; otherwise the first field is assumed to be the wrapped one.