Relax bound on blanket impl for Source #45
Closed
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.
The current definition in this library is not friendly for dynamic use like
dyn polling::Source
, because the blanket implementation ofSource
for&T
(instead ofT
). Consider the following code:polling/src/lib.rs
Lines 539 to 543 in ca52490
The current implementation is effectively accepting a double reference because there are references in both the receiver type and
&T
, and it does not align with other traits that we might also be interested to have (e.g.,Read
,Write
). Consider the following attempt to have a dynamicSource
which is alsoRead
able andWrite
able:Unfortunately, (for example)
TcpStream
does not implementReadWriteSource
because it does not implementSource
.With the proposed changes, types
TcpStream
will properly implementReadWriteSource
. A platform-agnostic return typeRawSource
forSource::raw
is also added to help if the users want to implementpolling::Source
by themselves.