12 releases

Uses new Rust 2024

new 0.6.0 Apr 13, 2025
0.5.3 Mar 14, 2025
0.5.2 Apr 17, 2024
0.5.1 Mar 29, 2024
0.1.0 Nov 21, 2023

#1331 in Rust patterns

Download history 1/week @ 2025-01-26 3/week @ 2025-02-16 3/week @ 2025-02-23 9/week @ 2025-03-02 100/week @ 2025-03-09 35/week @ 2025-03-16 4/week @ 2025-03-23 1/week @ 2025-03-30

140 downloads per month

MIT/Apache

125KB
2K SLoC

anony

Provides various constructs for anonymous types.

Macros

  • struct!: Creates an instance of an anonymous struct.
use anony::r#struct;

let items = vec![1, 3, 5];

let x = r#struct! {
    name: "discreaminant".to_owned(),
    // Move the `items` variable into the struct
    items,
};

assert_eq!(x.name, "discreaminant");
assert_eq!(x.items, [1, 3, 5]);
  • tuple!: Creates an instance of an anonymous tuple.
use anony::tuple;

let items = vec![1, 3, 5];

let x = tuple!("discreaminant".to_owned(), items);

assert_eq!(x.0, "discreaminant");
assert_eq!(x.1, [1, 3, 5]);

combine_futures! and combine_futures_cyclic!: General-purpose future combinators. Requires the future feature.

let mut s = String::new();

let fut = combine_futures! {
    let ten = async { 10 } => continue {
        s.write_fmt(format_args!("{ten}"));
        ten
    }
    let zero = async { "0" } => continue s.push_str(zero),
};

assert_eq!(fut.await, (10, ()));
assert_eq!(s, "100");
let mut x = 2;

let fut = combine_futures_cyclic! {
    move
    match async { Some(1) } {
        Some(x) if x % 2 == 0 => continue,
        _ => break {
            x += 1;
            x
        }
    }
    continue async {},
    |_, _| -1
};

assert_eq!(fut.await, 3);
assert_eq!(x, 2);

Example Macro Expansions

https://github.com/discreaminant2809/anony/tree/master/examples/expansions

Features

  • serde: Derives Serialize for anonymous structs and tuples. The serde crate must be included in your dependencies.
  • future: Enables Future anonymous types, such as combine_futures!.

Nightly

Add this to your dependencies:

anony = { git = "https://github.com/discreaminant2809/anony.git", branch = "nightly" }

Dependencies

~265–700KB
~17K SLoC