disown

Crates.iodisown
lib.rsdisown
version1.0.0
sourcesrc
created_at2022-03-09 02:57:14.482621
updated_at2022-03-09 02:57:14.482621
descriptionDrop ownership via a method.
homepagehttps://github.com/fosskers/disown
repositoryhttps://github.com/fosskers/disown
max_upload_size
id546699
size3,718
Colin Woodbury (fosskers)

documentation

README

disown

Drop ownership from "method position".

Motivation

Normally, unowned data is automatically dropped at the end of its residing block. We can also ignore unuseful return values with ;, which is essentially a T -> () transformation. However, there are cases where we wish to drop ownership and return cleanly with a (), but don't want to involve ; (such as in closures or simple match arms). We could use [std::mem::drop] for this, but drop is a function, not a method, and would visually mar a nice chain of method calls.

Hence the [Disown] trait and its method disown. It is drop, but in "method position".

use disown::Disown;
use std::collections::HashSet;

enum Person {
    Bob,
    Sam,
}

let mut set = HashSet::new();
let person = Person::Bob;

match person {
  Person::Bob => set.insert(0).disown(),
  Person::Sam => set.insert(1).disown(),
}

HashSet::insert returns a bool, not (), and the above code would not compile without opening a pair of {} and using a ;, which doesn't look as nice.

License: MIT

Commit count: 2

cargo fmt