field_names_and_counts

Crates.iofield_names_and_counts
lib.rsfield_names_and_counts
version0.1.0
created_at2026-01-16 01:58:47.518821+00
updated_at2026-01-16 01:58:47.518821+00
descriptionTraits for accessing field names and counts at compile time.
homepage
repository
max_upload_size
id2047611
size19,796
brendan c (bcolloran)

documentation

README

field_names_and_counts

CI Codecov

Derive macros and traits for getting field/variant names and counts at compile time.

Quick examples

Structs

use field_names_and_counts::{FieldNames, FieldNamesAndCount};

#[derive(FieldNames)]
struct Person {
    name: String,
    age: u32,
}

assert_eq!(Person::field_names(), &["name", "age"]);
assert_eq!(Person::field_count(), 2);

Enums

use field_names_and_counts::{VariantNames, VariantNamesAndCount};

#[derive(VariantNames)]
enum Message {
    Ping,
    Data(String),
}

assert_eq!(Message::variant_names(), &["Ping", "Data"]);
assert_eq!(Message::variant_count(), 2);

Installation

cargo add field_names_and_counts

Attributes

  • #[field_names(skip)] skips a struct field from the generated list.
  • #[variant_names(skip)] skips an enum variant from the generated list.

More examples

Skipping fields

use field_names_and_counts::{FieldNames, FieldNamesAndCount};

#[derive(FieldNames)]
struct Config {
    name: String,
    #[field_names(skip)]
    secret: String,
    enabled: bool,
}

assert_eq!(Config::field_names(), &["name", "enabled"]);
assert_eq!(Config::field_count(), 2);

Skipping enum variants

use field_names_and_counts::{VariantNames, VariantNamesAndCount};

#[derive(VariantNames)]
enum Event {
    Started,
    #[variant_names(skip)]
    Internal(String),
    Finished,
}

assert_eq!(Event::variant_names(), &["Started", "Finished"]);
assert_eq!(Event::variant_count(), 2);
Commit count: 0

cargo fmt