if_empty

Crates.ioif_empty
lib.rsif_empty
version0.3.0
sourcesrc
created_at2021-06-19 00:14:14.780389
updated_at2021-07-30 22:54:14.330312
descriptionReplace if/else checks for emptyness with a simple method call
homepagehttps://github.com/cschlosser/IfEmpty#ifempty
repositoryhttps://github.com/cschlosser/IfEmpty
max_upload_size
id411920
size34,509
Christoph Schlosser (cschlosser)

documentation

https://docs.rs/if_empty/0.2.0/if_empty/

README

IfEmpty

CI Status

A crate to use for defensive programming where context specific defaults are needed.

Motivation

While using an Option is preferrably in most circumstances there are situations where a function call doesn't return a Option and the Default of a type isn't helpful either.

You now have the option to wrap this special function call or write something along these lines:

let foo = {
    let b = bar();
    if b.is_empty() {
        Bar {
            // set the default values for your context here
        }
    } else {
        b
    }
};

Using this crate you can reduce this down to:

let foo = bar().if_empty(Bar { /* ... */ });

Implementing this for your own type

In order to take advantage of this feature you have to implement this behavior for your types:


use if_empty::*;

struct Foo {
    val: bool,
}

impl IfEmpty for Foo {
    fn if_empty(self, value: Foo) -> Foo {
        if self.is_empty() {
            value
        } else {
            self
        }
    }
}

See derive_macro for how to use the #[derive] macro.

Provided types

The crate provides this functionality for String, OsString, &str and &OsStr.

Commit count: 48

cargo fmt