An open API service indexing awesome lists of open source software.

https://github.com/ctron/isx

Traits for checking certain conditions of values
https://github.com/ctron/isx

Last synced: about 1 year ago
JSON representation

Traits for checking certain conditions of values

Awesome Lists containing this project

README

          

# is-x

Traits for checking certain conditions of values: is empty? is default?

Also see:

## Examples

For the `IsDefault` trait:

```rust
use isx::prelude::*;

fn test () {
assert!(false.is_default());
assert!(true.is_not_default());
}
```

For the `IsEmpty` trait:

```rust
use isx::prelude::*;

fn test () {
assert!(vec![].is_empty());
assert!(None::<()>.is_empty());
}
```

## Why?

Because in same cases, it would be great to have a common pattern:

```rust

#[derive(Default, IsDefault, IsEmpty, serde::Serialize, serde::Deserialize)]
struct MySubData {
// […]
}

#[derive(Default, serde::Serialize, serde::Deserialize)]
struct MyData {
#[serde(default, skip_serializing_if = "IsEmpty::is_empty")]
list: Vec,
#[serde(default, skip_serializing_if = "IsEmpty::is_empty")]
map: HashMap,
#[serde(default, skip_serializing_if = "IsEmpty::is_empty")]
optional: Option,

#[serde(default, skip_serializing_if = "IsDefault::is_default")]
flag: bool,

#[serde(default, skip_serializing_if = "IsEmpty::is_empty")]
sub_data: MySubData,
}
```

Having that in `std` or `core`, might actually convince people to go for this:

```rust
#[derive(Default, serde::Serialize, serde::Deserialize)]
struct MyData {
#[serde(default, skip_serializing_empty)]
list: Vec,
#[serde(default, skip_serializing_empty)]
map: HashMap,

#[serde(default, skip_serializing_default)]
flag: bool,
}
```

## ToDo

* Implement a derive for `IsDefault`
* Implement a derive for `IsEmpty`