Comments (5)
Hm, thanks.
There was a discussion about this here (comparison with serde / question 1) and in this comment below:
I feel like the semantics of
#[serde(default = "some::Function::foo")]
would be too restrictive for derive_builder.
- I suspect a lot of simple cases where delegation to
some::Function::foo
would be overkill anddefault="42"
is really all you want- For complex cases it would seem beneficial to delegate to methods on
FooBuilder
which can inspect all builder fields.It would have been nice to share the semantics with a popular crate like serde. But this would have significant drawbacks IMO.
The outcome of that discussion was, please delegate to methods if that makes sense (complex stuff), or use arbitrary expressions if you know what you are doing (only really recommended for simple const expressions). The docs clearly recommends delegating to helper methods.
I still believe that 100% serde-behaviour is not a good fit for derive_builder. E.g. in serde you cannot write default="42"
, instead you have to wrap const-values in a static function. - at least the last time I checked the documentation.
from rust-derive-builder.
I still believe that 100% serde-behaviour is not a good fit for derive_builder. E.g. in serde you cannot write default="42", instead you have to wrap const-values in a static function. - at least the last time I checked the documentation.
This is accurate. Is there maybe a way to check at compile time that the user has either passed:
- A value literal that implements
Copy
or - A path to a function?
That could disallow the exotic misuses while still allowing the desired simple case.
from rust-derive-builder.
A custom derive can only inspect the source code of the item it is applied to. Nothing more - so we don't know what's in scope and what implements what. We're completely blind to the world. :-)
from rust-derive-builder.
:( bummer. Okay, in that case I'm out of ideas on this one.
from rust-derive-builder.
I thinks it's the best we can do right now. I'll close in the meantime.
from rust-derive-builder.
Related Issues (20)
- Option for generating both `strip_option` + non-`strip_option` versions of a setter? HOT 2
- Update syn dependency? HOT 9
- Feature request: infallible build() HOT 3
- Provides builder functions that consume ownership HOT 5
- Owned pattern does not compile with custom default function. HOT 5
- Question: shorthand fields HOT 3
- Potential to allow for arguments in custom validator function HOT 4
- Allow way to prevent dependency on crate `alloc`. HOT 4
- Document `custom_constructor` and `create_empty` flags
- Non-chaining `&mut` pattern HOT 3
- This library is brilliant!
- Please advise: toBuilder functionality HOT 4
- Builder + Figment HOT 5
- Feature request: `impl fn builder() -> Builder` for the struct that is derived from HOT 1
- Consuming build but by mut setters? HOT 4
- Add conditional setters for options HOT 1
- Allow builder_struct_attr to set attributes before #[derive(...)]
- enh: support infallible builders HOT 1
- support suppressing default `Clone` derivation HOT 1
- Feature request: infallible `build` HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from rust-derive-builder.