-
Notifications
You must be signed in to change notification settings - Fork 12.8k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
impl Try for ExitStatus #93565
Closed
Closed
impl Try for ExitStatus #93565
Changes from all commits
Commits
Show all changes
2 commits
Select commit
Hold shift + click to select a range
File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains 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
This file contains 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
This file contains 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
This file contains 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
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.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
If I follow the docs on Try correctly, I think this isn't quite right.
Try::from_output(x).branch() --> ControlFlow::Continue(x)
to me implies thattype Output = ExitStatus
would be correct here.I think the current implementation is forcing a synthesis of ExitStatus from (), whereas you actually "want" to just pass along the ExitStatus you're taking in
branch
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This is definitely the least straightforward part of this patch, and definitely deserves scrutiny.
I believed though that it does meet the
Try
laws, becausebranch() --> ControlFlow::Continue(x) iff self.code() == 0
.And I think
type Output = ExitStatus
seems weird to me, becauseExitStatusError
is a subset ofExitStatus
such that the values intersect, so I felt it was weird in the way that aResult<ExitStatus, ExitStatusError>
would be strange, since it has values which would be valid in both theOk
, and theErr
branches.Anyhow, that is the justification for why I did it this way at least.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I also noticed this in the documentation for the
Residual
associated type:https://doc.rust-lang.org/stable/std/ops/trait.Try.html#associatedtype.Residual
Which
type Output = ExitStatus
would run afoul of.Edit: I think if we want to change the
type Output
here away from unit, we should try and introduce a new type to complementExitStatusError
. Such asExitStatusSuccess
or some bikeshed to that extent.Edit 2: This would also would allow
exit_status????
because success would be identity which implementsTry
.