Easy pretty print your Rust struct into single element or list
```rust use descriptor::{objectdescribeto_string, Descriptor};
struct Foo { firstfield: String, intfield: i32, }
fn main() { println!("{}", objectdescribetostring(Foo{firstfield: "foo", int_field: 1}).unwrap()); } ```
Will print or simple description:
First Field: foo
Int Field: 1
Or for table:
FIRST_FIELD INT_FIELD
foo 1
The #[derive(Descriptor)]
will auto implement the Describe
Trait for the Struct
#[descriptor(into = AnotherStruct)]
Will use another struct to describe the struct.
The From
or Into
Trait should be implemented and AnotherStruct
should implement the Describe
trait
#[descriptor(headers = &["HEADER_1"])]
Will override the default generated header list
#[descriptor(map = some_func)]
A function hook that act on the entire row with the struct as context.
The function need to return a String
fn some_func(contextual_struct: &A, cell: String) -> String {
match contextual_struct.is_selected {
true => cell.green(),
false => cell.reset(),
}
.to_string()
}
#[descriptor(skip)]
Will skip this field on any context
#[descriptor(skip_header)]
Will skip this field on the auto-generated default headers list
#[descriptor(skip_description)]
Will skip this field on the description context
#[descriptor(output_table)]
On a description context, will display a list into a table, example:
```
struct A {
#[descriptor(output_table)]
history: Vec
History: STATE VALUE test value ```
#[descriptor(resolve_option)]
Should we resolve option, usefull with the map
attribute
#[descriptor(into = AnotherStruct)]
Same as into
in the Struct Level but for a specific Field
#[descriptor(map=to_string)]
Use a function in order to transform the value, function will receive the field by reference.
Assume that the return function is a scalar type
.
#[descriptor(map=to_string, method)]
Use a method instead of a public function.
#[descriptor(map=to_another_struct, method, into=AnotherStruct)]
Use a method instead of From
to go on another struct.
#[descriptor(rename_header="HEADER_NAME")]
Rename a header field
#[descriptor(rename_description="Another Description")]
Rename a description value for Enum. TODO(aca): Implement this for description field ?
#[descriptor(flatten)]
Flatten a struct into another one
#[descriptor(additional_struct = ComputedStruct)]
Add another other field into the struct. ComputedStruct
must impl the From
Trait