[][src]Crate shpat

A bunch of patterns that I often met while programming in Rust. I put them in a single crate, so other Rustaceans may also enjoy them.

This crate has the following goals:

  • as lightweight as possible, no dependencies,
  • integrate patterns with each others.

Current patterns


Some methods in Rust don't take ownership, and just take reference of an object. This may be nice in some situations, but this does not allow to chain methods. The Apply trait allows to bring back method chaining for methods which take mutable references.

For example, HashMap can be created easily:

use std::collections::HashMap;

use shpat::prelude::*;

let map = HashMap::new()
    .apply(|m| m.insert("manatee", 42))
    .apply(|m| m.insert("horse", 101));

The Apply trait is implemented for every Sized type. It also provides apply_keep, which returns the value returned by the inner method and the object itself (which may be usefull when one wants to insert a value in a hash map, but want to keep returned value), and apply_unwrap, which will call unwrap on every Unwrapable returned value.


The Unwrappable trait is an attempt to unify the behavior of types which represent a success or failure dichotomy, such as Result and Option. These type implement a method which returns the success value, and panics if it was a failure. These behaviours are unified with the unwrap function.

This trait is implemented for both Result and Option. It is closely related to the Try trait from the standard library.



The prelude file, importing this module will bring every pattern to the scope.