docs: document that #[from] on an opaque type needs forwarding From impls for ? conversion - #456
Open
TrueFurina wants to merge 1 commit into
Open
TrueFurina wants to merge 1 commit into
TrueFurina wants to merge 1 commit into
Conversation
…mpls for ? conversion
Author
|
Friendly ping - this is still open on my side and mergeable as far as I can tell. Happy to address any remaining feedback if something is blocking it. Thanks! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #439.
Problem
The "hiding implementation details behind an opaque error type" example in both the crate docs and the README shows
pub struct PublicError(#[from] ErrorRepr)with an elidedErrorReprbody. Users who fill in the body exactly as suggested by the issue (variants likeFoo(#[from] Foo)) then writethrow_foo()?in a function returningResult<(), PublicError>and get:This is not a derive bug:
#[from]on the outer opaque type suppliesFrom<ErrorRepr>only, and?performs a single conversion step. But the docs actively teach a shape that hits this trap with no warning.Fix (docs-only)
src/lib.rs) andREADME.mdnow note that#[from]on the opaque type only suppliesFrom<ErrorRepr>, and that?-based direct conversion from an underlying error type needs its own forwarding impl.src/lib.rsadds a compilable doctest showing the forwarding impl (impl From<Foo> for PublicError);README.mdshows the same snippet.Fromfor#[from]leaf types), I'm happy to close this in favor of that direction — [Feature request] Enabling support for transitive "#[from]' handling #435/#[from] without implying #[source] #422 discuss related#[from]semantics.Testing
cargo test --doc— 11 passed / 0 failed (10 pre-existing + the new forwarding-impl doctest)