diff --git a/README.md b/README.md index 2cab6f5..3acda1e 100644 --- a/README.md +++ b/README.md @@ -1,12 +1,12 @@ # serde-inline-default [![ci](https://github.com/ByteDream/serde-inline-default/actions/workflows/ci.yml/badge.svg)](https://github.com/ByteDream/serde-inline-default/actions/workflows/ci.yml) [![crates.io](https://img.shields.io/crates/v/serde-inline-default)](https://crates.io/crates/serde-inline-default) [![crates.io downloads](https://img.shields.io/crates/d/serde-inline-default)](https://crates.io/crates/serde-inline-default) [![docs](https://img.shields.io/docsrs/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 = "")]`. -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