Skip to content
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

transports/quic: Adapt QuicMuxer to upstream StreamMuxer changes #6

Closed
wants to merge 97 commits into from
Closed
Show file tree
Hide file tree
Changes from 24 commits
Commits
Show all changes
97 commits
Select commit Hold shift + click to select a range
7c8a977
swarm/src/handler: Document responsibility limiting inbound streams (…
mxinden Jul 14, 2022
d4f8ec2
misc/metrics: Track # connected nodes supporting specific protocol (…
mxinden Jul 15, 2022
1a553db
core/muxing: Flatten `StreamMuxer` interface to `poll_{inbound,outbou…
thomaseizinger Jul 18, 2022
e95232c
build(deps): Bump Swatinem/rust-cache from 1.4.0 to 2.0.0 (#2759)
dependabot[bot] Jul 19, 2022
66c2319
transports/tcp: Bump to v0.35.0 (#2760)
mxinden Jul 19, 2022
c8066df
*: Update to `if-watch` `1.1.1` (#2754)
tgmichel Jul 19, 2022
163c5c1
README.md: Add crates.io and docs.rs badges (#2766)
LesnyRumcajs Jul 21, 2022
51a8471
build(deps): Update prometheus-client requirement from 0.16.0 to 0.17…
dependabot[bot] Jul 22, 2022
f15a3dc
core/muxing: Drop `Unpin` requirement from `SubstreamBox` (#2762)
thomaseizinger Jul 22, 2022
2e2c117
core/tests: Remove unnecessary `Arc` (#2763)
thomaseizinger Jul 22, 2022
95713ab
core: fix PR number in changelog entry (#2769)
elenaf9 Jul 23, 2022
f85a990
core/tests: Remove unnecessary util module (#2764)
thomaseizinger Jul 25, 2022
c19a211
misc/metrics: fix clippy::assign-op-pattern (#2773)
elenaf9 Jul 25, 2022
0ec3bbc
core/muxing: Remove `Unpin` requirement from `StreamMuxer::Substream`…
thomaseizinger Jul 25, 2022
74f01e4
transports/tcp: fix clippy::from-over-into (#2774)
elenaf9 Jul 25, 2022
ce963df
core: fix clippy::op-ref, clippy::needless-borrow (#2770)
elenaf9 Jul 25, 2022
56c492c
core/muxing: Drop `Sync` requirement for `StreamMuxer` on `StreamMuxe…
thomaseizinger Jul 27, 2022
09c6908
protocols/dcutr: Fix clippy lints (#2772)
elenaf9 Jul 28, 2022
eaf3f3a
.cargo: Check all features in custom-clippy (#2771)
elenaf9 Jul 28, 2022
7019d49
Merge branch 'master' of github.com:libp2p/rust-libp2p into quic/mult…
elenaf9 Jul 31, 2022
2b9e212
examples/README.md: Fix tutorial link (#2790)
lukehinds Aug 2, 2022
028dece
core/muxing: Have functions on `StreamMuxer` take `Pin<&mut Self>` (#…
thomaseizinger Aug 3, 2022
07c0dba
Merge branch 'master' of github.com:libp2p/rust-libp2p into quic/muxer
elenaf9 Aug 3, 2022
57840a3
transports/quic: adapt QuicMuxer to libp2p#2724
elenaf9 Aug 3, 2022
579b1be
swarm-derive/: Generate OutEvent if not provided (#2792)
mxinden Aug 8, 2022
e2b83b7
SECURITY.md: Document supported releases and security mail addr (#2800)
mxinden Aug 8, 2022
3da8b42
README: Point to security@libp2p.io (#2799)
mxinden Aug 8, 2022
1012579
protocols/: Remove passing default variant to `WithPeerId::condition`…
K0UR05H Aug 10, 2022
a4110a2
*: Remove `inject_connected` / `inject_disconnected` from docs (#2805)
K0UR05H Aug 10, 2022
0a01c81
misc/multistream-select: Replace msg.get(0) with msg.first() (#2816)
mxinden Aug 13, 2022
3ce0ef9
transports/quic: apply suggestions from review
elenaf9 Aug 13, 2022
3060d12
transports/quic: rename QuicMuxerInner -> Inner
elenaf9 Aug 13, 2022
63c6edc
transports/quic: improve poll_{inbound, outbound}
elenaf9 Aug 13, 2022
06aaea6
*: Fix `clippy::derive-partial-eq-without-eq` (#2818)
elenaf9 Aug 14, 2022
cef5056
core/muxing: Generalise `StreamMuxer::poll_address_change` to `poll` …
thomaseizinger Aug 16, 2022
0e5a25d
examples/file-sharing: Support binary files (#2786)
qidu Aug 16, 2022
878c49f
swarm/src/behaviour: Deprecate NetworkBehaviourEventProcess (#2784)
mxinden Aug 16, 2022
6a9fa3d
build(deps): Update prost requirement from 0.10 to 0.11 (#2788)
dependabot[bot] Aug 16, 2022
8dc0188
swarm/src/connection: Test max_negotiating_inbound_streams (#2785)
mxinden Aug 16, 2022
67266c6
swarm-derive/: Add where clause of behaviour to generated out event (…
mxinden Aug 17, 2022
d2c5053
build(deps): Update prometheus-client requirement from 0.17.0 to 0.18…
dependabot[bot] Aug 17, 2022
a2738fd
swarm-derive/: Derive Debug for generated OutEvent (#2821)
mxinden Aug 17, 2022
475289c
docs/coding-guidelines: Add document (#2780)
mxinden Aug 17, 2022
8931860
core/identity: Allow clippy::large-enum-variant on `Keypair` (#2827)
elenaf9 Aug 19, 2022
1aeaba3
Merge branch 'master' of github.com:libp2p/rust-libp2p into quic/muxer
elenaf9 Aug 19, 2022
95fc6da
transports/quic: drive connection in `QuicMuxer::poll`
elenaf9 Aug 19, 2022
3d3666e
*: Enforce no clippy warnings for examples (#2826)
thomaseizinger Aug 20, 2022
217dd2c
clippy.toml: Create config and disallow unbounded channels (#2823)
mxinden Aug 20, 2022
0d7c8a5
transports/quic: refactor `Connection::poll_event`
elenaf9 Aug 21, 2022
67b52aa
transports/quic: rm `Connection::is_handshaking`
elenaf9 Aug 21, 2022
66974fc
transports/quic: refactor connection closing
elenaf9 Aug 22, 2022
4253080
*: Prepare v0.47.0 (#2830)
mxinden Aug 22, 2022
c88efe8
transports/quic: rm mutex around to_endpoint tx
elenaf9 Aug 22, 2022
0a82be4
transports/quic/tests: drive peers concurrently
elenaf9 Aug 22, 2022
d610e4b
protocols/dcutr: Disable `libp2p-core` default features (#2836)
elenaf9 Aug 23, 2022
d92cab8
build(deps): Update p256 requirement from 0.10.0 to 0.11.0 (#2636)
dependabot[bot] Aug 23, 2022
ca07ce4
swarm/behaviour: Remove deprecated NetworkBehaviourEventProcess (#2840)
mxinden Aug 26, 2022
a3dec47
docs/coding-guidelines: Document limit on number of tasks (#2839)
mxinden Aug 26, 2022
247b553
swarm-derive/: Remove support for custom poll method (#2841)
mxinden Aug 28, 2022
6855ab9
swarm-derive/: Remove support for ignoring fields on struct (#2842)
mxinden Aug 29, 2022
e01f77b
transports/noise: Migrate away from deprecated `sodiumoxide` for test…
pinkforest Aug 30, 2022
f16561c
.github/workflows: Split advisory issues from PR workflows using `car…
pinkforest Aug 30, 2022
36a2773
*: Update changelogs for prost dep update (#2851)
divagant-martian Aug 30, 2022
89f898c
protocols/mdns: Allow users to choose between async-io and tokio runt…
gallegogt Sep 2, 2022
cee199a
protocols/kad: Support multiple protocol names (#2846)
dmitry-markin Sep 3, 2022
f04df29
.git-blame-ignore-revs/: Initialize and add rustfmt commit (#2864)
thomaseizinger Sep 4, 2022
b8c3b28
protocols/gossipsub: Allow publishing to anything that implements `In…
GamePad64 Sep 5, 2022
a40180c
.github/: Introduce interop tests (#2835)
laurentsenta Sep 7, 2022
8644c65
core/: Introduce `rsa` feature flag to avoid `ring` dependency (#2860)
GamePad64 Sep 7, 2022
2eca38c
core/upgrade/: Add `ReadyUpgrade` (#2855)
thomaseizinger Sep 7, 2022
d2eddf4
muxers/yamux: Remove `OpenSubstreamToken` (#2873)
thomaseizinger Sep 7, 2022
83c6795
*: Prepare v0.48.0 (#2869)
mxinden Sep 7, 2022
c650dc1
*: Replace _serde with dep:serde in Cargo.toml (#2868)
GamePad64 Sep 8, 2022
69caf98
Merge branch 'master' of github.com:libp2p/rust-libp2p into quic/muxer
elenaf9 Sep 9, 2022
fe3e09b
transports/quic: upgrade to if-watch v2.0.0
elenaf9 Sep 9, 2022
b6924db
transports/quic: fix clippy
elenaf9 Sep 9, 2022
689460f
transports/quic: fix smoke test
elenaf9 Sep 9, 2022
457fb51
transports/tcp: Simplify IfWatcher integration (#2813)
elenaf9 Sep 10, 2022
41d39fb
transports/quic: add `Endpoint::try_send`
elenaf9 Sep 10, 2022
66c2755
swarm/: Fix rare test failure of `multiple_addresses_err` (#2882)
thomaseizinger Sep 11, 2022
72bade1
build(deps): Update env_logger to 0.9 and criterion to 0.4 (#2896)
kpp Sep 14, 2022
5906140
protocols/kad: Remove deprecated `set_protocol_name()` (#2866)
dmitry-markin Sep 15, 2022
2c739e9
protocols/noise: Introduce `NoiseAuthenticated::xx` constructor with …
thomaseizinger Sep 16, 2022
c81b06a
*: Fix various clippy warnings (#2900)
umgefahren Sep 16, 2022
2025de3
swarm-derive/: Allow for templated behaviours (#2907)
thomaseizinger Sep 16, 2022
4c617a0
subscribe
elenaf9 Sep 17, 2022
4e027b1
transports/quic: handle substream being dropped
elenaf9 Sep 19, 2022
bdba780
transports/quic: return err on read after reset
elenaf9 Sep 19, 2022
40cb4f3
transports/quic: apply comments from code review
elenaf9 Sep 19, 2022
f8d1430
transports/quic: better naming, fix docs
elenaf9 Sep 20, 2022
4c3229b
transports/quic: add doc for `Endpoint:try_send`
elenaf9 Sep 20, 2022
e393fe5
transports/quic: add `ip_to_listenaddr`
elenaf9 Sep 20, 2022
d28db18
transports/quic: disable connection migration
elenaf9 Sep 20, 2022
42db0ed
transports/quic: minor fix
elenaf9 Sep 20, 2022
d46b72e
transports/quic: minor fixes
elenaf9 Sep 20, 2022
ec3c74a
transports/quic: rework forwarding of new connections
elenaf9 Sep 20, 2022
b7103aa
transports/quic: fix broken intra-doc link
elenaf9 Sep 20, 2022
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .cargo/config.toml
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
[alias]
# Temporary solution to have clippy config in a single place until https://github.com/rust-lang/rust-clippy/blob/master/doc/roadmap-2021.md#lintstoml-configuration is shipped.
custom-clippy = "clippy -- -A clippy::type_complexity -A clippy::pedantic -D warnings"
custom-clippy = "clippy --all-features -- -A clippy::type_complexity -A clippy::pedantic -D warnings"
10 changes: 5 additions & 5 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ jobs:

- uses: actions/checkout@v3

- uses: Swatinem/rust-cache@cb2cf0cc7c5198d3364b9630e2c3d457f160790c # v1.4.0
- uses: Swatinem/rust-cache@6720f05bc48b77f96918929a9019fb2203ff71f8 # v2.0.0
with:
key: ${{ matrix.args }}

Expand Down Expand Up @@ -72,7 +72,7 @@ jobs:
- name: Install CMake
run: sudo apt-get install -y cmake

- uses: Swatinem/rust-cache@cb2cf0cc7c5198d3364b9630e2c3d457f160790c # v1.4.0
- uses: Swatinem/rust-cache@6720f05bc48b77f96918929a9019fb2203ff71f8 # v2.0.0
with:
key: ${{ matrix.toolchain }}

Expand All @@ -99,7 +99,7 @@ jobs:
toolchain: stable
override: true

- uses: Swatinem/rust-cache@cb2cf0cc7c5198d3364b9630e2c3d457f160790c # v1.4.0
- uses: Swatinem/rust-cache@6720f05bc48b77f96918929a9019fb2203ff71f8 # v2.0.0

- name: Check rustdoc links
run: RUSTDOCFLAGS="--deny broken_intra_doc_links" cargo doc --verbose --workspace --no-deps --document-private-items --all-features
Expand All @@ -122,7 +122,7 @@ jobs:
override: true
components: clippy

- uses: Swatinem/rust-cache@cb2cf0cc7c5198d3364b9630e2c3d457f160790c # v1.4.0
- uses: Swatinem/rust-cache@6720f05bc48b77f96918929a9019fb2203ff71f8 # v2.0.0

- name: Run cargo clippy
uses: actions-rs/cargo@844f36862e911db73fe0815f00a4a2602c279505 # v1.0.3
Expand All @@ -147,7 +147,7 @@ jobs:
toolchain: stable
override: true

- uses: Swatinem/rust-cache@cb2cf0cc7c5198d3364b9630e2c3d457f160790c # v1.4.0
- uses: Swatinem/rust-cache@6720f05bc48b77f96918929a9019fb2203ff71f8 # v2.0.0

- name: Run ipfs-kad example
run: RUST_LOG=libp2p_swarm=debug,libp2p_kad=trace,libp2p_tcp=debug cargo run --example ipfs-kad
Expand Down
22 changes: 11 additions & 11 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -80,38 +80,38 @@ instant = "0.1.11" # Explicit dependency to be used in `wasm-bindgen` feature
lazy_static = "1.2"

libp2p-autonat = { version = "0.6.0", path = "protocols/autonat", optional = true }
libp2p-core = { version = "0.34.0", path = "core", default-features = false }
libp2p-core = { version = "0.35.0", path = "core", default-features = false }
libp2p-dcutr = { version = "0.5.0", path = "protocols/dcutr", optional = true }
libp2p-floodsub = { version = "0.38.0", path = "protocols/floodsub", optional = true }
libp2p-identify = { version = "0.38.0", path = "protocols/identify", optional = true }
libp2p-kad = { version = "0.39.0", path = "protocols/kad", optional = true }
libp2p-metrics = { version = "0.8.0", path = "misc/metrics", optional = true }
libp2p-mplex = { version = "0.34.0", path = "muxers/mplex", optional = true }
libp2p-noise = { version = "0.37.0", path = "transports/noise", optional = true }
libp2p-mplex = { version = "0.35.0", path = "muxers/mplex", optional = true }
libp2p-noise = { version = "0.38.0", path = "transports/noise", optional = true }
libp2p-ping = { version = "0.38.0", path = "protocols/ping", optional = true }
libp2p-plaintext = { version = "0.34.0", path = "transports/plaintext", optional = true }
libp2p-plaintext = { version = "0.35.0", path = "transports/plaintext", optional = true }
libp2p-pnet = { version = "0.22.0", path = "transports/pnet", optional = true }
libp2p-relay = { version = "0.11.0", path = "protocols/relay", optional = true }
libp2p-rendezvous = { version = "0.8.0", path = "protocols/rendezvous", optional = true }
libp2p-request-response = { version = "0.20.0", path = "protocols/request-response", optional = true }
libp2p-swarm = { version = "0.38.0", path = "swarm" }
libp2p-swarm-derive = { version = "0.28.0", path = "swarm-derive" }
libp2p-uds = { version = "0.33.0", path = "transports/uds", optional = true }
libp2p-wasm-ext = { version = "0.34.0", path = "transports/wasm-ext", default-features = false, optional = true }
libp2p-yamux = { version = "0.38.0", path = "muxers/yamux", optional = true }
libp2p-uds = { version = "0.34.0", path = "transports/uds", optional = true }
libp2p-wasm-ext = { version = "0.35.0", path = "transports/wasm-ext", default-features = false, optional = true }
libp2p-yamux = { version = "0.39.0", path = "muxers/yamux", optional = true }
multiaddr = { version = "0.14.0" }
parking_lot = "0.12.0"
pin-project = "1.0.0"
rand = "0.7.3" # Explicit dependency to be used in `wasm-bindgen` feature
smallvec = "1.6.1"

[target.'cfg(not(any(target_os = "emscripten", target_os = "wasi", target_os = "unknown")))'.dependencies]
libp2p-deflate = { version = "0.34.0", path = "transports/deflate", optional = true }
libp2p-dns = { version = "0.34.0", path = "transports/dns", optional = true, default-features = false }
libp2p-deflate = { version = "0.35.0", path = "transports/deflate", optional = true }
libp2p-dns = { version = "0.35.0", path = "transports/dns", optional = true, default-features = false }
libp2p-mdns = { version = "0.39.0", path = "protocols/mdns", optional = true }
libp2p-quic = { version = "0.7.0", path = "transports/quic", optional = true }
libp2p-tcp = { version = "0.34.0", path = "transports/tcp", default-features = false, optional = true }
libp2p-websocket = { version = "0.36.0", path = "transports/websocket", optional = true }
libp2p-tcp = { version = "0.35.0", path = "transports/tcp", default-features = false, optional = true }
libp2p-websocket = { version = "0.37.0", path = "transports/websocket", optional = true }

[target.'cfg(not(target_os = "unknown"))'.dependencies]
libp2p-gossipsub = { version = "0.40.0", path = "protocols/gossipsub", optional = true }
Expand Down
2 changes: 2 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,8 @@

<a href="http://libp2p.io/"><img src="https://img.shields.io/badge/project-libp2p-yellow.svg?style=flat-square" /></a>
[![dependency status](https://deps.rs/repo/github/libp2p/rust-libp2p/status.svg?style=flat-square)](https://deps.rs/repo/github/libp2p/rust-libp2p)
[![Crates.io](https://img.shields.io/crates/v/libp2p.svg)](https://crates.io/crates/libp2p)
[![docs.rs](https://img.shields.io/badge/api-rustdoc-blue.svg)](https://docs.rs/libp2p)

This repository is the central place for Rust development of the [libp2p](https://libp2p.io) spec.

Expand Down
15 changes: 14 additions & 1 deletion core/CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,19 @@
# 0.35.0 [unreleased]

- Remove `StreamMuxer::poll_event` in favor of individual functions: `poll_inbound`, `poll_outbound`
and `poll_address_change`. Consequently, `StreamMuxerEvent` is also removed. See [PR 2724].
- Drop `Unpin` requirement from `SubstreamBox`. See [PR 2762] and [PR 2776].
- Drop `Sync` requirement on `StreamMuxer` for constructing `StreamMuxerBox`. See [PR 2775].
- Use `Pin<&mut Self>` as the receiver type for all `StreamMuxer` poll functions. See [PR 2765].

[PR 2724]: https://github.com/libp2p/rust-libp2p/pull/2724
[PR 2762]: https://github.com/libp2p/rust-libp2p/pull/2762
[PR 2775]: https://github.com/libp2p/rust-libp2p/pull/2775
[PR 2776]: https://github.com/libp2p/rust-libp2p/pull/2776
[PR 2765]: https://github.com/libp2p/rust-libp2p/pull/2765

# 0.34.0

- Introduce `StreamMuxerEvent::map_inbound_stream`. See [PR 2691].
- Remove `{read,write,flush,shutdown,destroy}_substream` functions from `StreamMuxer` trait
in favor of forcing `StreamMuxer::Substream` to implement `AsyncRead + AsyncWrite`. See [PR 2707].
- Replace `Into<std::io::Error>` bound on `StreamMuxer::Error` with `std::error::Error`. See [PR 2710].
Expand Down
2 changes: 1 addition & 1 deletion core/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ name = "libp2p-core"
edition = "2021"
rust-version = "1.56.1"
description = "Core traits and structs of libp2p"
version = "0.34.0"
version = "0.35.0"
authors = ["Parity Technologies <admin@parity.io>"]
license = "MIT"
repository = "https://github.com/libp2p/rust-libp2p"
Expand Down
86 changes: 34 additions & 52 deletions core/src/either.rs
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
// DEALINGS IN THE SOFTWARE.

use crate::{
muxing::{StreamMuxer, StreamMuxerEvent},
muxing::StreamMuxer,
transport::{ListenerId, Transport, TransportError, TransportEvent},
Multiaddr, ProtocolName,
};
Expand Down Expand Up @@ -202,78 +202,60 @@ where
B: StreamMuxer,
{
type Substream = EitherOutput<A::Substream, B::Substream>;
type OutboundSubstream = EitherOutbound<A, B>;
type Error = EitherError<A::Error, B::Error>;

fn poll_event(
&self,
fn poll_inbound(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
) -> Poll<Result<StreamMuxerEvent<Self::Substream>, Self::Error>> {
match self {
EitherOutput::First(inner) => inner
.poll_event(cx)
.map_err(EitherError::A)
.map_ok(|event| event.map_inbound_stream(EitherOutput::First)),
EitherOutput::Second(inner) => inner
.poll_event(cx)
.map_err(EitherError::B)
.map_ok(|event| event.map_inbound_stream(EitherOutput::Second)),
}
}

fn open_outbound(&self) -> Self::OutboundSubstream {
match self {
EitherOutput::First(inner) => EitherOutbound::A(inner.open_outbound()),
EitherOutput::Second(inner) => EitherOutbound::B(inner.open_outbound()),
) -> Poll<Result<Self::Substream, Self::Error>> {
match self.project() {
EitherOutputProj::First(inner) => inner
.poll_inbound(cx)
.map_ok(EitherOutput::First)
.map_err(EitherError::A),
EitherOutputProj::Second(inner) => inner
.poll_inbound(cx)
.map_ok(EitherOutput::Second)
.map_err(EitherError::B),
}
}

fn poll_outbound(
&self,
self: Pin<&mut Self>,
cx: &mut Context<'_>,
substream: &mut Self::OutboundSubstream,
) -> Poll<Result<Self::Substream, Self::Error>> {
match (self, substream) {
(EitherOutput::First(ref inner), EitherOutbound::A(ref mut substream)) => inner
.poll_outbound(cx, substream)
.map(|p| p.map(EitherOutput::First))
match self.project() {
EitherOutputProj::First(inner) => inner
.poll_outbound(cx)
.map_ok(EitherOutput::First)
.map_err(EitherError::A),
(EitherOutput::Second(ref inner), EitherOutbound::B(ref mut substream)) => inner
.poll_outbound(cx, substream)
.map(|p| p.map(EitherOutput::Second))
EitherOutputProj::Second(inner) => inner
.poll_outbound(cx)
.map_ok(EitherOutput::Second)
.map_err(EitherError::B),
_ => panic!("Wrong API usage"),
}
}

fn destroy_outbound(&self, substream: Self::OutboundSubstream) {
match self {
EitherOutput::First(inner) => match substream {
EitherOutbound::A(substream) => inner.destroy_outbound(substream),
_ => panic!("Wrong API usage"),
},
EitherOutput::Second(inner) => match substream {
EitherOutbound::B(substream) => inner.destroy_outbound(substream),
_ => panic!("Wrong API usage"),
},
fn poll_address_change(
self: Pin<&mut Self>,
cx: &mut Context<'_>,
) -> Poll<Result<Multiaddr, Self::Error>> {
match self.project() {
EitherOutputProj::First(inner) => inner.poll_address_change(cx).map_err(EitherError::A),
EitherOutputProj::Second(inner) => {
inner.poll_address_change(cx).map_err(EitherError::B)
}
}
}

fn poll_close(&self, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
match self {
EitherOutput::First(inner) => inner.poll_close(cx).map_err(EitherError::A),
EitherOutput::Second(inner) => inner.poll_close(cx).map_err(EitherError::B),
fn poll_close(self: Pin<&mut Self>, cx: &mut Context<'_>) -> Poll<Result<(), Self::Error>> {
match self.project() {
EitherOutputProj::First(inner) => inner.poll_close(cx).map_err(EitherError::A),
EitherOutputProj::Second(inner) => inner.poll_close(cx).map_err(EitherError::B),
}
}
}

#[derive(Debug, Copy, Clone)]
#[must_use = "futures do nothing unless polled"]
pub enum EitherOutbound<A: StreamMuxer, B: StreamMuxer> {
A(A::OutboundSubstream),
B(B::OutboundSubstream),
}

/// Implements `Future` and dispatches all method calls to either `First` or `Second`.
#[pin_project(project = EitherFutureProj)]
#[derive(Debug, Copy, Clone)]
Expand Down
6 changes: 3 additions & 3 deletions core/src/identity/ecdsa.rs
Original file line number Diff line number Diff line change
Expand Up @@ -157,7 +157,7 @@ impl PublicKey {
let buf = Self::del_asn1_header(k).ok_or_else(|| {
DecodingError::new("failed to parse asn.1 encoded ecdsa p256 public key")
})?;
Self::from_bytes(&buf)
Self::from_bytes(buf)
}

// ecPublicKey (ANSI X9.62 public key type) OID: 1.2.840.10045.2.1
Expand Down Expand Up @@ -198,8 +198,8 @@ impl PublicKey {
if asn1_head[0] != 0x30
|| asn1_head[2] != 0x30
|| asn1_head[3] as usize != oids_len
|| &oids_buf[..Self::EC_PUBLIC_KEY_OID.len()] != &Self::EC_PUBLIC_KEY_OID
|| &oids_buf[Self::EC_PUBLIC_KEY_OID.len()..] != &Self::SECP_256_R1_OID
|| oids_buf[..Self::EC_PUBLIC_KEY_OID.len()] != Self::EC_PUBLIC_KEY_OID
|| oids_buf[Self::EC_PUBLIC_KEY_OID.len()..] != Self::SECP_256_R1_OID
|| bitstr_head[0] != 0x03
|| bitstr_head[2] != 0x00
{
Expand Down
Loading