8 breaking releases
| 0.11.0 | Jul 8, 2025 |
|---|---|
| 0.10.0 | Dec 6, 2024 |
| 0.9.0 | Dec 6, 2024 |
| 0.8.0 | Nov 22, 2024 |
#59 in #ergonomics
1,796 downloads per month
Used in 148 crates
(8 directly)
31KB
240 lines
ai-descriptor
ai-descriptor is a Rust procedural macro crate that automatically implements the AIDescriptor trait for enums based on the #[ai("...")] attributes provided on each variant. This helps eliminate boilerplate code and makes your codebase cleaner and more maintainable.
Features
- Automatic Trait Implementation: Derive
AIDescriptorfor your enums, and the macro will generate the implementation based on the#[ai("...")]attributes. - Compile-Time Error Checking: If a variant is missing the
#[ai("...")]attribute, the macro will produce a compile-time error. - Seamless Integration: Works well with other procedural macros like
RandomConstructible.
Getting Started
Add Dependency
Add the following to your Cargo.toml:
[dependencies]
ai-descriptor = "0.1.0"
Import the Crate
In your Rust file, import the AIDescriptor macro:
use ai_descriptor::AIDescriptor;
Usage
Deriving AIDescriptor for Enums
You can automatically implement AIDescriptor for your enums by using the #[derive(AIDescriptor)] macro and adding #[ai("...")] attributes to each variant.
Example
use ai_descriptor::AIDescriptor;
use std::borrow::Cow;
#[derive(AIDescriptor)]
enum Emotion {
#[ai("A feeling of great pleasure or happiness.")]
Joy,
#[ai("A strong feeling of displeasure or hostility.")]
Anger,
#[ai("A feeling of sadness or grief.")]
Sadness,
}
impl Emotion {
fn ai(&self) -> Cow<'_, str> {
// Generated automatically by the macro
}
}
Using the ai() Method
After deriving AIDescriptor, you can use the ai() method:
fn main() {
let emotion = Emotion::Joy;
println!("Description: {}", emotion.ai());
}
Output
Description: A feeling of great pleasure or happiness.
Attributes
#[ai("...")]
- Applies to: Enum variants.
- Purpose: Provides a description or associated string with the variant.
- Required: Yes, for all variants when using
#[derive(AIDescriptor)].
Limitations
- Enums Only: The
AIDescriptorderive macro only works with enums. - Mandatory
#[ai]Attributes: All variants must have the#[ai("...")]attribute; otherwise, a compile-time error will occur.
Integration with Other Crates
- RandomConstructible: The
ai-descriptorcrate can be used alongside therandom-constructiblecrate to provide both random instantiation and AI descriptions for your enums.
License
This project is licensed under the MIT License - see the LICENSE file for details.
Contribution
Contributions are welcome! Please open an issue or submit a pull request on GitHub.
Acknowledgments
- Inspired by the need to simplify the implementation of descriptive methods for enums in Rust.
- Utilizes the
proc-macrocrate for procedural macros andsynandquotefor parsing and generating Rust code.
Contact
For questions or suggestions, feel free to open an issue or contact the maintainer.
Happy coding!
Dependencies
~11–26MB
~264K SLoC