iroh icon indicating copy to clipboard operation
iroh copied to clipboard

Review foreign types in public APIs

Open Frando opened this issue 10 months ago • 1 comments

We currently expose quite a lot of types from dependencies in the pubic API of iroh. We should review that list before 1.0. For some types from widely used crates with a 1.0 release, e.g. bytes::Bytes , we're likely fine with exposing them.

For types from pre-1.0 crates, leaving them in the public API of iroh means we cannot update the crate (apart from patch-level changes) without a semver breaking change in iroh.

There's a tool called cargo-check-external-types which produces a list of foreign types that are used in public APIs.

I ran the tool on iroh-base, iroh-relay, and iroh with the following crates excluded: bytes, serde, url, iroh_metrics, iroh_quinn, iroh_quinn_proto. Reasoning: bytes, serde, url are 1.0. iroh_metrics we will release at 1.0 ourselves. And quinn we know we have to deal with either by releasing iroh-quinn as 1.0 or by newtyping everything.

Here's the cleaned up and deduplicated list on main as of 2025-10-13:

Crate Type Used In
Crate Type Used In
backtrace backtrace::capture::Backtrace iroh-base/src/key.rs:207:5
iroh-base/src/ticket.rs:63:5
iroh-relay/src/client.rs:51:5
iroh-relay/src/client.rs:91:5
iroh-relay/src/client/conn.rs:30:5
iroh-relay/src/client/conn.rs:53:5
iroh-relay/src/dns.rs:66:5
iroh-relay/src/dns.rs:96:5
iroh-relay/src/node_info.rs:414:5
iroh-relay/src/node_info.rs:52:5
iroh-relay/src/node_info.rs:70:5
iroh-relay/src/protos/common.rs:57:5
iroh-relay/src/protos/handshake.rs:137:5
iroh-relay/src/protos/relay.rs:45:5
iroh-relay/src/quic.rs:232:5
iroh-relay/src/server.rs:272:5
iroh-relay/src/server.rs:296:5
data_encoding data_encoding::DecodeError iroh-base/src/key.rs:211:10
iroh-base/src/key.rs:217:14
iroh-base/src/ticket.rs:67:17
iroh-base/src/ticket.rs:83:16
ed25519_dalek ed25519_dalek::errors::SignatureError iroh-base/src/key.rs:120:5
iroh-base/src/key.rs:131:5
iroh-base/src/key.rs:221:9
iroh-base/src/lib.rs:18:79
iroh-relay/src/node_info.rs:84:24
iroh-relay/src/protos/relay.rs:62:24
ed25519_dalek ed25519_dalek::signing::SigningKey iroh-base/src/key.rs:319:5
iroh-base/src/key.rs:324:1
ed25519_dalek ed25519_dalek::verifying::VerifyingKey iroh-base/src/key.rs:109:5
iroh-base/src/key.rs:182:1
ed25519 ed25519::Signature iroh-base/src/key.rs:131:5
iroh-base/src/key.rs:300:5
iroh-base/src/lib.rs:18:68
futures_core futures_core::stream::Stream iroh-relay/src/client.rs:375:1
iroh-relay/src/client.rs:461:1
futures_lite futures_lite::future::Boxed iroh-relay/src/dns.rs:43:5
iroh-relay/src/dns.rs:46:5
iroh-relay/src/dns.rs:49:5
iroh-relay/src/server.rs:141:16
futures_sink futures_sink::Sink iroh-relay/src/client.rs:383:1
iroh-relay/src/client.rs:418:1
iroh-relay/src/client/conn.rs:140:1
iroh-relay/src/server/streams.rs:89:1
hickory_resolver hickory_resolver::error::ResolveError iroh-relay/src/dns.rs:71:17
iroh-relay/src/dns.rs:88:9
http http::header::name::HeaderName iroh-relay/src/http.rs:22:1
http http::header::value::HeaderValue iroh-relay/src/protos/handshake.rs:142:17
iroh-relay/src/protos/handshake.rs:170:31
http http::header::value::InvalidHeaderValue iroh-relay/src/server.rs:277:17
iroh-relay/src/server.rs:285:22
http http::status::StatusCode iroh-relay/src/client.rs:111:33
iroh-relay/src/client.rs:56:17
iroh-relay/src/client.rs:75:31
iroh-relay/src/client.rs:96:17
hyper hyper::error::Error iroh-relay/src/client.rs:115:20
iroh-relay/src/client.rs:56:17
iroh-relay/src/client.rs:77:15
iroh-relay/src/client.rs:96:17
n0_snafu n0_snafu::spantrace::SpanTrace iroh-base/src/key.rs:209:5
iroh-base/src/ticket.rs:65:5
iroh-relay/src/client.rs:53:5
iroh-relay/src/client.rs:93:5
iroh-relay/src/client/conn.rs:32:5
iroh-relay/src/client/conn.rs:55:5
iroh-relay/src/dns.rs:68:5
iroh-relay/src/dns.rs:98:5
iroh-relay/src/node_info.rs:416:5
iroh-relay/src/node_info.rs:54:5
iroh-relay/src/node_info.rs:72:5
iroh-relay/src/protos/common.rs:59:5
iroh-relay/src/protos/handshake.rs:139:5
iroh-relay/src/protos/relay.rs:47:5
iroh-relay/src/quic.rs:234:5
iroh-relay/src/server.rs:274:5
iroh-relay/src/server.rs:298:5
num_enum num_enum::TryFromPrimitive iroh-relay/src/protos/common.rs:14:65
num_enum num_enum::TryFromPrimitiveError iroh-relay/src/protos/common.rs:14:65
pkarr pkarr::signed_packet::SignedPacket iroh-relay/src/node_info.rs:391:5
iroh-relay/src/node_info.rs:399:5
pkarr pkarr::signed_packet::SignedPacketBuildError iroh-relay/src/node_info.rs:57:17
iroh-relay/src/node_info.rs:63:9
postcard postcard::error::Error iroh-base/src/ticket.rs:67:17
iroh-base/src/ticket.rs:80:16
iroh-relay/src/protos/handshake.rs:142:17
iroh-relay/src/protos/handshake.rs:166:9
iroh-relay/src/protos/relay.rs:50:17
iroh-relay/src/protos/relay.rs:58:13
rand_core rand_core::CryptoRng iroh-base/src/key.rs:293:5
reloadable_core reloadable_core::Loader iroh-relay/src/server/resolver.rs:28:1
iroh-relay/src/server/resolver.rs:33:5
iroh-relay/src/server/resolver.rs:77:1
reloadable_state reloadable_state::Reloadable iroh-relay/src/server/resolver.rs:89:5
reqwest reqwest::dns::resolve::Resolve iroh-relay/src/dns.rs:482:1
rustls_pki_types rustls_pki_types::CertificateDer iroh-relay/src/server.rs:234:9
iroh-relay/src/server.rs:511:5
iroh-relay/src/server/testing.rs:9:1
rustls rustls::client::client_conn::ClientConfig iroh-relay/src/client.rs:473:1
iroh-relay/src/quic.rs:260:5
rustls rustls::crypto::signer::CertifiedKey iroh-relay/src/server/resolver.rs:28:1
iroh-relay/src/server/resolver.rs:77:1
iroh-relay/src/server/resolver.rs:89:5
rustls rustls::server::server_conn::ResolvesServerCert iroh-relay/src/server/resolver.rs:77:1
rustls rustls::server::server_conn::ServerConfig iroh-relay/src/server.rs:177:5
iroh-relay/src/server.rs:198:5
iroh-relay/src/server/testing.rs:9:1
serde_core serde_core::de::Deserialize iroh-base/src/key.rs:271:1
iroh-base/src/key.rs:87:1
iroh-base/src/node_addr.rs:39:35
iroh-base/src/relay_url.rs:20:83
iroh-base/src/ticket/node.rs:123:1
iroh-relay/src/relay_map.rs:115:50
iroh-relay/src/relay_map.rs:142:17
serde_core serde_core::ser::Serialize iroh-base/src/key.rs:262:1
iroh-base/src/key.rs:74:1
iroh-base/src/node_addr.rs:39:24
iroh-base/src/relay_url.rs:20:72
iroh-base/src/ticket/node.rs:112:1
iroh-relay/src/relay_map.rs:115:39
iroh-relay/src/relay_map.rs:142:30
signature signature::error::Error iroh-base/src/key.rs:158:5
iroh-base/src/key.rs:168:5
iroh-base/src/key.rs:211:10
iroh-base/src/key.rs:337:5
iroh-relay/src/node_info.rs:75:17
iroh-relay/src/protos/relay.rs:50:17
simple_dns simple_dns::simple_dns_error::SimpleDnsError iroh-relay/src/node_info.rs:57:17
iroh-relay/src/node_info.rs:66:23
snafu snafu::ErrorCompat iroh-base/src/key.rs:211:10
iroh-base/src/relay_url.rs:42:17
iroh-base/src/ticket.rs:67:17
iroh-relay/src/client.rs:56:17
iroh-relay/src/client.rs:96:17
iroh-relay/src/client/conn.rs:35:17
iroh-relay/src/client/conn.rs:58:17
iroh-relay/src/dns.rs:101:17
iroh-relay/src/dns.rs:119:17
iroh-relay/src/dns.rs:71:17
iroh-relay/src/node_info.rs:230:17
iroh-relay/src/node_info.rs:419:17
iroh-relay/src/node_info.rs:57:17
iroh-relay/src/node_info.rs:75:17
iroh-relay/src/protos/common.rs:62:17
iroh-relay/src/protos/handshake.rs:142:17
iroh-relay/src/protos/relay.rs:50:17
iroh-relay/src/quic.rs:237:17
iroh-relay/src/server.rs:277:17
iroh-relay/src/server.rs:301:17
snafu snafu::IntoError iroh-base/src/key.rs:211:10
iroh-base/src/relay_url.rs:42:17
iroh-base/src/ticket.rs:67:17
iroh-relay/src/client.rs:56:17
iroh-relay/src/client.rs:96:17
iroh-relay/src/client/conn.rs:35:17
iroh-relay/src/dns.rs:101:17
iroh-relay/src/dns.rs:119:17
iroh-relay/src/dns.rs:71:17
iroh-relay/src/node_info.rs:230:17
iroh-relay/src/node_info.rs:419:17
iroh-relay/src/node_info.rs:57:17
iroh-relay/src/node_info.rs:75:17
iroh-relay/src/protos/common.rs:62:17
iroh-relay/src/protos/handshake.rs:142:17
iroh-relay/src/protos/relay.rs:50:17
iroh-relay/src/server.rs:277:17
iroh-relay/src/server.rs:301:17
snafu snafu::NoneError iroh-base/src/key.rs:211:10
iroh-base/src/ticket.rs:67:17
iroh-relay/src/client.rs:56:17
iroh-relay/src/client.rs:96:17
iroh-relay/src/client/conn.rs:35:17
iroh-relay/src/dns.rs:119:17
iroh-relay/src/dns.rs:71:17
iroh-relay/src/node_info.rs:230:17
iroh-relay/src/node_info.rs:419:17
iroh-relay/src/node_info.rs:75:17
iroh-relay/src/protos/common.rs:62:17
iroh-relay/src/protos/handshake.rs:142:17
iroh-relay/src/protos/relay.rs:50:17
iroh-relay/src/server.rs:277:17
iroh-relay/src/server.rs:301:17
tokio_rustls_acme tokio_rustls_acme::state::AcmeState iroh-relay/src/server.rs:229:9
tokio_util tokio_util::task::abort_on_drop::AbortOnDropHandle iroh-relay/src/server.rs:491:5
tokio_websockets tokio_websockets::error::Error iroh-relay/src/client.rs:56:17
iroh-relay/src/client.rs:66:9
iroh-relay/src/client/conn.rs:35:17
iroh-relay/src/client/conn.rs:41:9
iroh-relay/src/client/conn.rs:58:17
iroh-relay/src/client/conn.rs:66:9
iroh-relay/src/protos/handshake.rs:142:17
iroh-relay/src/protos/handshake.rs:148:9
tokio tokio::runtime::task::error::JoinError iroh-relay/src/server.rs:301:17
iroh-relay/src/server.rs:309:17
tokio tokio::sync::watch::error::RecvError iroh-relay/src/quic.rs:237:17
iroh-relay/src/quic.rs:245:17
tokio tokio::time::error::Elapsed iroh-relay/src/client.rs:105:15
iroh-relay/src/client.rs:96:17
iroh-relay/src/dns.rs:71:17
iroh-relay/src/dns.rs:76:15
z32 z32::Z32Error iroh-relay/src/node_info.rs:75:17
iroh-relay/src/node_info.rs:80:26

Frando avatar Feb 10 '25 15:02 Frando