mirror of
https://github.com/bytedream/serde-inline-default.git
synced 2025-12-15 00:02:06 +01:00
docs: simplify readme
This commit is contained in:
18
README.md
18
README.md
@@ -1,12 +1,12 @@
|
||||
# serde-inline-default [](https://github.com/ByteDream/serde-inline-default/actions/workflows/ci.yml) [](https://crates.io/crates/serde-inline-default) [](https://crates.io/crates/serde-inline-default) [](https://docs.rs/serde-inline-default/latest/serde_inline_default/)
|
||||
|
||||
Tiny crate to set default values for serde fields via inline attribute declaration.
|
||||
A tiny crate to set default values for serde struct fields via inline attribute declaration.
|
||||
|
||||
## Overview
|
||||
|
||||
This crate is an approach to do what [serde-rs/serde#368](https://github.com/serde-rs/serde/issues/368) purposes.
|
||||
If you want to set default values in plain [`serde`](https://serde.rs/), you have to create a function and link to it with `#[serde(default = "...")`.
|
||||
This may be good if you need to do calculations to get the default value, but often you just want a simple integer or string to be the default value and have to create a whole function to return a hard-coded value.
|
||||
This crate is an approach to do what [serde-rs/serde#368](https://github.com/serde-rs/serde/issues/368) purposes: Defining default values for struct fields via inline declaration instead of creating a separate function for it.
|
||||
|
||||
So instead of writing something like this, which can get very verbose quickly with many fields:
|
||||
```rust
|
||||
#[derive(Deserialize)]
|
||||
struct Test {
|
||||
@@ -16,11 +16,7 @@ struct Test {
|
||||
|
||||
fn value_default() -> u32 { 42 }
|
||||
```
|
||||
|
||||
That can get quiet messy if you have many fields with many (different) default values.
|
||||
This crate tries to solve this issue by providing the `#[serde_inline_default]` proc macro.
|
||||
With this macro set at the struct level, you can set default values via `#[serde_inline_default(...)]` for your serde fields inline, without creating an extra function.
|
||||
|
||||
you can just do this:
|
||||
```rust
|
||||
#[serde_inline_default]
|
||||
#[derive(Deserialize)]
|
||||
@@ -31,10 +27,10 @@ struct Test {
|
||||
```
|
||||
|
||||
> [!IMPORTANT]
|
||||
> **`#[serde_inline_default]` must be set before `#[derive(Deserialize)]`/`#[derive(Serialize)]`, otherwise it's not working correctly!**
|
||||
> **`#[serde_inline_default]` must be set before `#[derive(Deserialize)]`/`#[derive(Serialize)]`!**
|
||||
|
||||
Internally, `#[serde_inline_default(...)]` gets expanded to a function which returns the set value and the attribute is replaced with `#[serde(default = "<function name>")]`.
|
||||
So this macro is just some syntax sugar for you, but can get quiet handy if you want to keep your code clean or write declarative macros / `macro_rules!`.
|
||||
So this macro is just some syntax sugar for you, but can get quite handy if you want to keep your code clean or write declarative macros / `macro_rules!`.
|
||||
|
||||
## Alternatives
|
||||
|
||||
|
||||
Reference in New Issue
Block a user