fix: Remove circular dependencies across workspace (#3023)

Circular dependencies are problematic in several ways:

- They result in cognitive overhead for developers, in trying to figure out what depends on what.
- They present `cargo` with limits in what order the crates can be compiled in.
- They invalidate build caches unnecessarily thus forcing `cargo` to rebuild certain crates.
- They cause problems with tooling such as `release-please`.

To actually break the circular dependencies, this patch inlines the uses of `development_transport` in the examples and tests for all sub-crates. This is only meant to be a short-term fix until https://github.com/libp2p/rust-libp2p/issues/3111 and https://github.com/libp2p/rust-libp2p/pull/2888 are fixed.

To ensure we don't accidentally reintroduce this dependency, we add a basic CI that queries `cargo metadata` using `jq`.

Resolves https://github.com/libp2p/rust-libp2p/issues/3053.
Fixes https://github.com/libp2p/rust-libp2p/issues/3223.
Related: https://github.com/libp2p/rust-libp2p/pull/2918#discussion_r976514245
Related: https://github.com/googleapis/release-please/issues/1662
This commit is contained in:
Thomas Eizinger
2022-12-13 07:58:01 +11:00
committed by GitHub
parent f8f19baad0
commit d7363a53d3
62 changed files with 746 additions and 703 deletions

View File

@@ -20,18 +20,17 @@
use std::{
marker::Unpin,
pin::Pin,
task::{Context, Poll},
time::{Duration, Instant},
};
/// Simple wrapper for the differents type of timers
/// Simple wrapper for the different type of timers
#[derive(Debug)]
#[cfg(any(feature = "async-io", feature = "tokio"))]
pub struct Timer<T> {
inner: T,
}
/// Builder interface to homogenize the differents implementations
/// Builder interface to homogenize the different implementations
pub trait Builder: Send + Unpin + 'static {
/// Creates a timer that emits an event once at the given time instant.
fn at(instant: Instant) -> Self;
@@ -48,6 +47,10 @@ pub mod asio {
use super::*;
use async_io::Timer as AsioTimer;
use futures::Stream;
use std::{
pin::Pin,
task::{Context, Poll},
};
/// Async Timer
pub type AsyncTimer = Timer<AsioTimer>;
@@ -86,6 +89,10 @@ pub mod tokio {
use super::*;
use ::tokio::time::{self, Instant as TokioInstant, Interval, MissedTickBehavior};
use futures::Stream;
use std::{
pin::Pin,
task::{Context, Poll},
};
/// Tokio wrapper
pub type TokioTimer = Timer<Interval>;