Skip to content

Commit 671fbcc

Browse files
committed
Merge github.com:libp2p/rust-libp2p into update-rust-test-conform-new-spec
2 parents a2c67d2 + babf7e3 commit 671fbcc

File tree

10 files changed

+154
-93
lines changed

10 files changed

+154
-93
lines changed

.github/workflows/cache-factory.yml

+4-6
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,9 @@ jobs:
3838

3939
- uses: actions/checkout@v3
4040

41-
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
41+
- uses: dtolnay/rust-toolchain@ce8f65846d7180d2ce63b1e74483d981800b9e22 # v1
4242
with:
43-
toolchain: ${{ matrix.rust }}
44-
override: true
43+
toolchain: ${{ matrix.rust }}
4544

4645
- uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6 # v2.2.0
4746
with:
@@ -61,10 +60,9 @@ jobs:
6160

6261
- uses: actions/checkout@v3
6362

64-
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
63+
- uses: dtolnay/rust-toolchain@ce8f65846d7180d2ce63b1e74483d981800b9e22 # v1
6564
with:
66-
toolchain: stable
67-
override: true
65+
toolchain: stable
6866

6967
- uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6 # v2.2.0
7068
with:

.github/workflows/ci.yml

+10-28
Original file line numberDiff line numberDiff line change
@@ -35,11 +35,9 @@ jobs:
3535
echo "version=${RUST_VERSION}" >> $GITHUB_OUTPUT
3636
3737
- name: Install Rust ${{ steps.parse-msrv.outputs.version }} for MSRV check
38-
uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
38+
uses: dtolnay/rust-toolchain@ce8f65846d7180d2ce63b1e74483d981800b9e22 # v1
3939
with:
40-
profile: minimal
4140
toolchain: ${{ steps.parse-msrv.outputs.version }}
42-
override: true
4341

4442
- uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6 # v2.2.0
4543
with:
@@ -49,11 +47,9 @@ jobs:
4947
- name: Check if ${{ matrix.crate }} compiles on MSRV (Rust ${{ steps.parse-msrv.outputs.version }})
5048
run: cargo +${{ steps.parse-msrv.outputs.version }} build --package ${{ matrix.crate }} --all-features
5149

52-
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
50+
- uses: dtolnay/rust-toolchain@ce8f65846d7180d2ce63b1e74483d981800b9e22 # v1
5351
with:
54-
profile: minimal
5552
toolchain: stable
56-
override: true
5753

5854
- uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6 # v2.2.0
5955
with:
@@ -113,11 +109,9 @@ jobs:
113109

114110
- uses: actions/checkout@v3
115111

116-
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
112+
- uses: dtolnay/rust-toolchain@ce8f65846d7180d2ce63b1e74483d981800b9e22 # v1
117113
with:
118-
profile: minimal
119114
toolchain: stable
120-
override: true
121115
target: ${{ matrix.target }}
122116

123117
- uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6 # v2.2.0
@@ -141,11 +135,9 @@ jobs:
141135

142136
- uses: actions/checkout@v3
143137

144-
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
138+
- uses: dtolnay/rust-toolchain@ce8f65846d7180d2ce63b1e74483d981800b9e22 # v1
145139
with:
146-
profile: minimal
147140
toolchain: stable
148-
override: true
149141

150142
- uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6 # v2.2.0
151143
with:
@@ -163,11 +155,9 @@ jobs:
163155

164156
- uses: actions/checkout@v3
165157

166-
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
158+
- uses: dtolnay/rust-toolchain@ce8f65846d7180d2ce63b1e74483d981800b9e22 # v1
167159
with:
168-
profile: minimal
169160
toolchain: stable
170-
override: true
171161

172162
- uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6 # v2.2.0
173163
with:
@@ -191,11 +181,9 @@ jobs:
191181

192182
- uses: actions/checkout@v3
193183

194-
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
184+
- uses: dtolnay/rust-toolchain@ce8f65846d7180d2ce63b1e74483d981800b9e22 # v1
195185
with:
196-
profile: minimal
197186
toolchain: ${{ matrix.rust-version }}
198-
override: true
199187
components: clippy
200188

201189
- uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6 # v2.2.0
@@ -216,11 +204,9 @@ jobs:
216204

217205
- uses: actions/checkout@v3
218206

219-
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
207+
- uses: dtolnay/rust-toolchain@ce8f65846d7180d2ce63b1e74483d981800b9e22 # v1
220208
with:
221-
profile: minimal
222209
toolchain: stable
223-
override: true
224210

225211
- uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6 # v2.2.0
226212
with:
@@ -234,11 +220,9 @@ jobs:
234220
steps:
235221
- uses: actions/checkout@v3
236222

237-
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
223+
- uses: dtolnay/rust-toolchain@ce8f65846d7180d2ce63b1e74483d981800b9e22 # v1
238224
with:
239-
profile: minimal
240225
toolchain: stable
241-
override: true
242226
components: rustfmt
243227

244228
- name: Check formatting
@@ -249,11 +233,9 @@ jobs:
249233
steps:
250234
- uses: actions/checkout@v3
251235

252-
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
253-
with:
254-
profile: minimal
236+
- uses: dtolnay/rust-toolchain@ce8f65846d7180d2ce63b1e74483d981800b9e22 # v1
237+
with:
255238
toolchain: stable
256-
override: true
257239

258240
- name: Ensure `full` feature contains all features
259241
run: |

.github/workflows/publish-interop-test-images.yml

+1-3
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,9 @@ jobs:
2222
steps:
2323
- uses: actions/checkout@v3
2424

25-
- uses: actions-rs/toolchain@16499b5e05bf2e26879000db0c1d13f7e13fa3af # v1.0.7
25+
- uses: dtolnay/rust-toolchain@ce8f65846d7180d2ce63b1e74483d981800b9e22 # v1
2626
with:
27-
profile: minimal
2827
toolchain: stable
29-
override: true
3028

3129
- uses: Swatinem/rust-cache@359a70e43a0bb8a13953b04a90f76428b4959bb6 # v2.2.0
3230
with:

Cargo.lock

+7-7
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

protocols/gossipsub/Cargo.toml

+1-1
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ categories = ["network-programming", "asynchronous"]
1313
[dependencies]
1414
libp2p-swarm = { version = "0.42.0", path = "../../swarm" }
1515
libp2p-core = { version = "0.39.0", path = "../../core" }
16-
bytes = "1.0"
16+
bytes = "1.4"
1717
byteorder = "1.3.4"
1818
fnv = "1.0.7"
1919
futures = "0.3.26"

swarm-derive/CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,14 @@
11
# 0.32.0 [unreleased]
22

3+
- Fix `NetworkBehaviour` Derive macro for generic types when `out_event` was not provided. Previously the enum generated
4+
didn't have the `NetworkBehaviour` impl constraints whilst using the generics for `<Generic>::OutEvent`.
5+
See [PR 3393].
6+
37
- Replace `NetworkBehaviour` Derive macro deprecated `inject_*` method implementations
48
with the new `on_swarm_event` and `on_connection_handler_event`.
59
See [PR 3011] and [PR 3264].
610

11+
[PR 3393]: https://github.com/libp2p/rust-libp2p/pull/3393
712
[PR 3011]: https://github.com/libp2p/rust-libp2p/pull/3011
813
[PR 3264]: https://github.com/libp2p/rust-libp2p/pull/3264
914

@@ -123,3 +128,4 @@ ambiguity. [PR 1681](https://github.com/libp2p/rust-libp2p/pull/1681).
123128
mechanism through `#[behaviour(event_process = false)]`. This is
124129
useful if users want to process all events while polling the
125130
swarm through `SwarmEvent::Behaviour`.
131+

swarm-derive/src/lib.rs

+85-46
Original file line numberDiff line numberDiff line change
@@ -106,40 +106,81 @@ fn build_struct(ast: &DeriveInput, data_struct: &DataStruct) -> TokenStream {
106106
}
107107
// User did not provide `OutEvent`. Generate it.
108108
None => {
109-
let name: syn::Type = syn::parse_str(&(ast.ident.to_string() + "Event")).unwrap();
109+
let enum_name_str = ast.ident.to_string() + "Event";
110+
let enum_name: syn::Type = syn::parse_str(&enum_name_str).unwrap();
110111
let definition = {
111-
let fields = data_struct
112-
.fields
113-
.iter()
114-
.map(|field| {
115-
let variant: syn::Variant = syn::parse_str(
116-
&field
117-
.ident
118-
.clone()
119-
.expect(
120-
"Fields of NetworkBehaviour implementation to be named.",
121-
)
122-
.to_string()
123-
.to_upper_camel_case(),
124-
)
125-
.unwrap();
126-
let ty = &field.ty;
127-
quote! {#variant(<#ty as #trait_to_impl>::OutEvent)}
128-
})
129-
.collect::<Vec<_>>();
112+
let fields = data_struct.fields.iter().map(|field| {
113+
let variant: syn::Variant = syn::parse_str(
114+
&field
115+
.ident
116+
.clone()
117+
.expect("Fields of NetworkBehaviour implementation to be named.")
118+
.to_string()
119+
.to_upper_camel_case(),
120+
)
121+
.unwrap();
122+
let ty = &field.ty;
123+
(variant, ty)
124+
});
125+
126+
let enum_variants = fields
127+
.clone()
128+
.map(|(variant, ty)| quote! {#variant(<#ty as #trait_to_impl>::OutEvent)});
129+
130130
let visibility = &ast.vis;
131131

132+
let additional = fields
133+
.clone()
134+
.map(|(_variant, tp)| quote! { #tp : #trait_to_impl })
135+
.collect::<Vec<_>>();
136+
137+
let additional_debug = fields
138+
.clone()
139+
.map(|(_variant, ty)| quote! { <#ty as #trait_to_impl>::OutEvent : ::core::fmt::Debug })
140+
.collect::<Vec<_>>();
141+
142+
let where_clause = {
143+
if let Some(where_clause) = where_clause {
144+
if where_clause.predicates.trailing_punct() {
145+
Some(quote! {#where_clause #(#additional),* })
146+
} else {
147+
Some(quote! {#where_clause, #(#additional),*})
148+
}
149+
} else if additional.is_empty() {
150+
None
151+
} else {
152+
Some(quote! {where #(#additional),*})
153+
}
154+
};
155+
156+
let where_clause_debug = where_clause
157+
.as_ref()
158+
.map(|where_clause| quote! {#where_clause, #(#additional_debug),*});
159+
160+
let match_variants = fields.map(|(variant, _ty)| variant);
161+
let msg = format!("`NetworkBehaviour::OutEvent` produced by {name}.");
162+
132163
Some(quote! {
133-
#[derive(::std::fmt::Debug)]
134-
#visibility enum #name #impl_generics
164+
#[doc = #msg]
165+
#visibility enum #enum_name #ty_generics
135166
#where_clause
136167
{
137-
#(#fields),*
168+
#(#enum_variants),*
169+
}
170+
171+
impl #impl_generics ::core::fmt::Debug for #enum_name #ty_generics #where_clause_debug {
172+
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> Result<(), std::fmt::Error> {
173+
match &self {
174+
#(#enum_name::#match_variants(event) => {
175+
write!(f, "{}: {:?}", #enum_name_str, event)
176+
}),*
177+
}
178+
}
138179
}
139180
})
140181
};
141182
let from_clauses = vec![];
142-
(name, definition, from_clauses)
183+
(enum_name, definition, from_clauses)
143184
}
144185
}
145186
};
@@ -664,30 +705,28 @@ fn build_struct(ast: &DeriveInput, data_struct: &DataStruct) -> TokenStream {
664705
}
665706
};
666707

667-
Some(quote!{
668-
loop {
669-
match #trait_to_impl::poll(&mut self.#field, cx, poll_params) {
670-
#generate_event_match_arm
671-
std::task::Poll::Ready(#network_behaviour_action::Dial { opts, handler: provided_handler }) => {
672-
return std::task::Poll::Ready(#network_behaviour_action::Dial { opts, handler: #provided_handler_and_new_handlers });
673-
}
674-
std::task::Poll::Ready(#network_behaviour_action::NotifyHandler { peer_id, handler, event }) => {
675-
return std::task::Poll::Ready(#network_behaviour_action::NotifyHandler {
676-
peer_id,
677-
handler,
678-
event: #wrapped_event,
679-
});
680-
}
681-
std::task::Poll::Ready(#network_behaviour_action::ReportObservedAddr { address, score }) => {
682-
return std::task::Poll::Ready(#network_behaviour_action::ReportObservedAddr { address, score });
683-
}
684-
std::task::Poll::Ready(#network_behaviour_action::CloseConnection { peer_id, connection }) => {
685-
return std::task::Poll::Ready(#network_behaviour_action::CloseConnection { peer_id, connection });
686-
}
687-
std::task::Poll::Pending => break,
708+
quote!{
709+
match #trait_to_impl::poll(&mut self.#field, cx, poll_params) {
710+
#generate_event_match_arm
711+
std::task::Poll::Ready(#network_behaviour_action::Dial { opts, handler: provided_handler }) => {
712+
return std::task::Poll::Ready(#network_behaviour_action::Dial { opts, handler: #provided_handler_and_new_handlers });
713+
}
714+
std::task::Poll::Ready(#network_behaviour_action::NotifyHandler { peer_id, handler, event }) => {
715+
return std::task::Poll::Ready(#network_behaviour_action::NotifyHandler {
716+
peer_id,
717+
handler,
718+
event: #wrapped_event,
719+
});
720+
}
721+
std::task::Poll::Ready(#network_behaviour_action::ReportObservedAddr { address, score }) => {
722+
return std::task::Poll::Ready(#network_behaviour_action::ReportObservedAddr { address, score });
688723
}
724+
std::task::Poll::Ready(#network_behaviour_action::CloseConnection { peer_id, connection }) => {
725+
return std::task::Poll::Ready(#network_behaviour_action::CloseConnection { peer_id, connection });
726+
}
727+
std::task::Poll::Pending => {},
689728
}
690-
})
729+
}
691730
});
692731

693732
let out_event_reference = if out_event_definition.is_some() {

0 commit comments

Comments
 (0)