elicitation_derive

Crates.ioelicitation_derive
lib.rselicitation_derive
version0.4.3
created_at2025-12-28 20:24:36.430777+00
updated_at2026-01-19 07:32:01.070287+00
descriptionDerive macros for elicitation library
homepagehttps://github.com/crumplecup/elicitation
repositoryhttps://github.com/crumplecup/elicitation
max_upload_size
id2009339
size57,871
Erik Rose (crumplecup)

documentation

https://docs.rs/elicitation

README

elicitation_derive

Derive macros for the elicitation library.

Crates.io Documentation License

This crate provides procedural macros for automatically implementing elicitation traits on custom types. It's typically used through the main elicitation crate.

Features

  • #[derive(Elicit)] - Automatic implementation of elicitation traits
  • Enum Support - Generates Select pattern for unit variant enums
  • Struct Support - Generates Survey pattern for structs
  • Attribute Support - #[prompt("...")], #[skip], and more

Usage

Add this to your Cargo.toml:

[dependencies]
elicitation = "0.2"

The derive macro is re-exported through the main crate:

use elicitation::Elicit;

#[derive(Debug, Elicit)]
enum Priority {
    Low,
    Medium,
    High,
}

#[derive(Debug, Elicit)]
struct Task {
    #[prompt("What's the task title?")]
    title: String,

    priority: Priority,
}

Attributes

#[prompt("...")]

Customize the prompt text for types or fields:

#[derive(Elicit)]
#[prompt("Choose your favorite color:")]
enum Color {
    Red,
    Green,
    Blue,
}

#[derive(Elicit)]
struct Config {
    #[prompt("Enter the server hostname:")]
    host: String,
}

#[skip]

Skip a field during elicitation (uses Default::default()):

use chrono::{DateTime, Utc};

#[derive(Default, Elicit)]
struct Task {
    title: String,

    #[skip]
    created_at: DateTime<Utc>,
}

Generated Implementations

For Enums (Select Pattern)

#[derive(Elicit)]
enum Status {
    Active,
    Inactive,
}

Generates:

  • impl Prompt for Status
  • impl Select for Status
  • impl Elicitation for Status

For Structs (Survey Pattern)

#[derive(Elicit)]
struct Person {
    name: String,
    age: u8,
}

Generates:

  • impl Prompt for Person
  • impl Survey for Person
  • impl Elicitation for Person

Requirements

  • Enum variants must be unit variants (no fields) in v0.2.0
  • Struct fields must implement Elicitation
  • Struct must implement Default if using #[skip] attribute

Version History

See CHANGELOG.md for version history.

License

Licensed under either of:

at your option.

Links

Commit count: 80

cargo fmt