-
Notifications
You must be signed in to change notification settings - Fork 55
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
add support for setting protocol handlers with {.raises.}
annotation
#1064
Merged
Merged
Changes from 1 commit
Commits
Show all changes
8 commits
Select commit
Hold shift + click to select a range
14fee3b
add support for setting protocol handlers with `{.raises.}` annotation
etan-status 417922c
example also needs a change, not sure if acceptable
etan-status 302359b
allow any explicit `raises` for `LPProtoHandler2`
etan-status 69f18ec
add comment for `InternalRaisesFuture` Nim 2.0 bug
etan-status 843fb45
rename `LPProtoHandler2` -> `LPProtocolHandler`
etan-status 967c40c
add documentation for `LPProtocolHandler`
etan-status 71dbcef
Merge branch 'unstable' into dev/etan/ex-handlersupport
etan-status 3af3aa5
avoid typedef for `LPProtocolHandler`
etan-status 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
Oops, something went wrong.
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.
does
lp2[E] = proc ...: Future[void].Raising(E)
work?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.
the
handler=
implementation worked for me.I tested it by changing
protocols/connectivity/relay/client.nim
toand
NIMFLAGS="--mm:refc" nimble test
still worked fine (refc because on orc it segfaults in metrics unrelated).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.
no, I mean you don't need to expose
InternalRaisesFuture
here (we can avoid it here too probably: #1050 (comment)):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.
the
proc
takes parameters and is passed around, hose parts would have to be continuously repeated. putting the[E]
directly on theproc
doesn't work, only the result type can be done that way.Exposing
InternalRaisesFuture
in a single place seems like the lesser evil to me, it's trivial to adjust if necessaryThere 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.
IMO adding any
*2
to the codebase isn't a good software engineering practice as it isn't sufficiently descriptive. Also, why is anIneternal*
type from another project referenced here?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.
The most used and popular api on earth does this, more or less: https://learn.microsoft.com/en-us/windows/win32/api/winver/nf-winver-getfileversioninfoexa (though they call it
Ex
instead of2
)I understand your concern, but sometimes, there just isn't any good naming solution and indeed, a comment might be the best option.
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.
They also have
Ex2
: https://learn.microsoft.com/en-us/windows/win32/api/vds/nf-vds-ivdsvolumemf3-formatex2There 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.
with a cherry on top for 3 in the interface name ;) in fact, com interfaces / all of .NET often versions itself this way
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 knew I'd regret the comment, but never worked with MS tho.
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.
So .. thinking a bit more about this, the answer is actually simple: we can remove
LPProtocolHandler
/LPProtoHandler2
altogether and just useFuture[...].Raising(E)
explicitly in the wrapper, which ensures user code is not polluted with a name that we don't necessarily want to support.This makes sense also because there as limitations to how you can use aliases together with `` ie
var f: LPProtocolHandler[[ValueError]]
doesn't work because of macro instantiation order issues.