| Crates.io | cutedogs |
| lib.rs | cutedogs |
| version | 0.0.5 |
| created_at | 2025-08-16 11:31:37.810427+00 |
| updated_at | 2025-08-16 17:20:27.611942+00 |
| description | An easy to use procedural macro to reduce documentation boilerplate |
| homepage | |
| repository | https://github.com/germ3n/cutedogs |
| max_upload_size | |
| id | 1798335 |
| size | 16,887 |
Programmatic Rust documentation - Write docs like code, not comments.
cutedogs transforms function documentation from scattered comment blocks into structured, attribute-driven declarations. Instead of writing traditional doc comments, you define documentation as structured data using Rust attributes - making it type-safe, IDE-friendly, and programmatically verifiable.
/// Calculates the area of a rectangle
///
/// # Parameters
/// * `width` - The width of the rectangle
/// * `height` - The height of the rectangle
///
/// # Returns
/// The area as a f64
///
/// # Example
/// ```rust
/// let area = calculate_area(5.0, 3.0);
/// assert_eq!(area, 15.0);
/// ```
fn calculate_area(width: f64, height: f64) -> f64 {
width * height
}
use cutedogs::document;
#[document(
summary = "Calculates the area of a rectangle",
params = {"width": "The width of the rectangle", "height": "The height of the rectangle"},
returns = "The area as a f64",
example = "let area = calculate_area(5.0, 3.0);\nassert_eq!(area, 15.0);"
)]
fn calculate_area(width: f64, height: f64) -> f64 {
width * height
}
✅ Structured & Type-Safe - Documentation fields are parsed at compile time
✅ IDE Support - Auto-completion, syntax highlighting, and refactoring tools work
✅ Programmatic - Generate docs from data, validate completeness, enforce standards
✅ Consistent - Uniform formatting and structure across your entire codebase
✅ Maintainable - Documentation is data, not prose scattered in comments
Add to your Cargo.toml:
[dependencies]
cutedogs = "0.0.5"
use cutedogs::document;
#[document(summary = "Adds two numbers together")]
fn add(a: i32, b: i32) -> i32 {
a + b
}
This generates clean, formatted rustdoc output while keeping your documentation structured and maintainable.
#[document(
summary = "Processes user data and returns formatted output",
params = {"name": "The user's full name", "age": "Age in years"},
returns = "A formatted string containing user information"
)]
fn process_user(name: &str, age: u32) -> String {
format!("{} is {} years old", name, age)
}
#[document(
summary = "Divides two numbers with error handling",
example = "let result = safe_divide(10.0, 2.0);\nassert_eq!(result, Ok(5.0));"
)]
fn safe_divide(a: f64, b: f64) -> Result<f64, String> {
if b == 0.0 { Err("Division by zero".to_string()) } else { Ok(a / b) }
}
Mark functions as not yet implemented with clear messaging:
#[document(unimplemented)]
fn future_feature() -> String {
unimplemented!()
}
#[document(unimplemented = "Waiting for database integration")]
fn connect_db() -> Result<(), String> {
unimplemented!()
}
#[document(
summary = "Advanced data processing with comprehensive documentation",
params = {"data": "Input vector to process"},
returns = "Processed data with doubled values",
example = "let result = process_data(vec![1, 2, 3]);",
panics = "Panics if input vector is empty",
safety = "Safe to use with any non-empty input",
since = "1.0.0",
see_also = "helper_function, related_processor",
note = "This function is optimized for large datasets"
)]
fn process_data(data: Vec<i32>) -> Vec<i32> {
assert!(!data.is_empty(), "Input cannot be empty");
data.into_iter().map(|x| x * 2).collect()
}
#[document(
summary = "Legacy function for backwards compatibility",
deprecated = "Use new_process_function() instead for better performance",
deprecated_since = "2.0.0"
)]
fn old_process_function() -> String {
"legacy".to_string()
}
| Field | Type | Description | Example |
|---|---|---|---|
summary |
String | Brief function description | "Calculates rectangle area" |
params |
Object | Parameter descriptions | {"width": "Width in pixels", "height": "Height in pixels"} |
returns |
String | Return value description | "Area as f64 value" |
example |
String | Code example with newlines | "let x = func(1, 2);\nassert_eq!(x, 3);" |
panics |
String | Panic conditions | "Panics if divisor is zero" |
safety |
String | Safety information | "Safe for all valid inputs" |
since |
String | Version introduced | "1.0.0" |
see_also |
String | Related functions (comma-separated) | "related_func, helper_func" |
note |
String | Important notes | "Performance critical section" |
deprecated |
String | Deprecation message | "Use new_func() instead" |
deprecated_since |
String | Version deprecated in | "2.0.0" |
unimplemented |
Flag/String | Mark as unimplemented | unimplemented or "Feature pending" |
cutedogs generates clean, properly formatted rustdoc comments that integrate seamlessly with cargo doc. The structured approach ensures consistent formatting, proper markdown sections, and complete documentation coverage.
Your IDE treats the attribute syntax as first-class Rust code, providing:
MIT OR Apache-2.0