2 unstable releases

Uses old Rust 2015

0.2.0 Apr 3, 2018
0.1.0 Jan 8, 2018

#2951 in Rust patterns

46 downloads per month

MIT license

8KB
128 lines

Sugar

Syntax sugar to make your Rust life more sweet.

Usage

use sugar::*;

Overview

use sugar::*;

// vec of boxed value
let vb1 = vec_box![1, 2, 3];

// list comprehension
let vb2 = c![Box::new(i), for i in 1..4];

// hashmap construction
let hm1 = hashmap!{
    1 => 2,
    2 => 3,
    3 => 4,
};

// hashmap comprehension
let hm2 = c![i => i + 1, for i in 1..4];

let _ = max!(1, 2, 3);
let _ = min!(1, 2, 3);

if cmp!(1, < num < 3) {
    println!("hello world");
}

More detail in sugar's documentation.


lib.rs:

Syntax sugar to make your Rust life more sweet.

Usage

use sugar::*;

Sugars

Collections construct

use sugar::*;

// vec construction
let v = vec![1, 2, 3];

// vec of boxed value
let vb = vec_box![1, 2, 3];

// hashmap construction
let hm = hashmap!{
    1 => 2,
    2 => 3,
    3 => 4,
};

// list comprehension
let vb2 = c![Box::new(i), for i in 1..4];
assert_eq!(vb, vb2);

// hashmap comprehension
let hm2 = c![i => i + 1, for i in 1..4];
assert_eq!(hm, hm2);
  • vec_box! is reexported from vec_box
  • hashmap! and related macros are reexported from maplit crate
  • c! list comprehension macro is reexported from cute crate

Hashmap: clone a value of speical key.

use sugar::*;

let hm = hashmap! {
    1 => "1".to_owned(),
    2 => "2".to_owned(),
};

let s = {
    hm.get_clone(&1)
};

assert_eq!(s.unwrap(), "1".to_owned());

Result: ignore Result's OK value

use sugar::SResultExt;

fn do_work1() -> Result<i32, String> {
    Ok(1)
}

fn do_work2() -> Result<(), String> {
    // I don't care about the result's Ok value
    do_work1()
        .drop_value()
}

do_work2();

max! and min! macros

use sugar::*;

assert_eq!(max!(3, 1, 2, 7, 0), 7);
assert_eq!(min!(3, 1, 2, 7, 0), 0);

Chained comparison

use sugar::*;

fn return_2() -> i32 {
    return 2;
}

assert_eq!(cmp!(1, < 2, < 3), true);
assert_eq!(cmp!(1, <= 2, <= 3), true);
assert_eq!(cmp!(1, <= 2, <= 3, != 4), true);

// return_2 will not be called
assert_eq!(cmp!(2, < 1, < 3, < return_2()), false);

// return_2 will be called once
assert_eq!(cmp!(1, < return_2(), <= 2), true);

Dependencies

~39KB