hyper
hyper copied to clipboard
Set up CI to audit for public dependency types
We want strict control over what types from dependencies we expose, and there is a tool that can help us check that in CI: cargo api-linter.
We should start by adding a new CI job to .github/workflows/CI.yml to use it. Any questions about what goes in the config file can be clarified here or in a PR.
Looks like that has been refactored into cargo-check-external-types. I'll pick up this up.
I ran this tool against the master branch (982e6a51385). Any objections to these types being exposed and added to the allowlist, @seanmonstar? The http crate seems to be the only one listed that isn't stable/on a path towards stabilization.
bytes::buf::buf_impl::Bufbytes::bytes::Byteshttp::headerhttp::header::map::HeaderMaphttp::method::Methodhttp::request::Requesthttp::response::Responsehttp::status::StatusCodehttp::uri::Urihttp::version::Versionhttp_body::Bodyhttp_body::frame::Framehttp_body::size_hint::SizeHinttokio::io::async_read::AsyncReadtokio::io::async_write::AsyncWrite
Full `cargo-check-external-types` output
| Crate | Type | Used In |
|---|---|---|
| bytes | bytes::buf::buf_impl::Buf | src/body/mod.rs:17:16 |
| bytes | bytes::bytes::Bytes | src/body/incoming.rs:155:4 |
| bytes | bytes::bytes::Bytes | src/body/mod.rs:17:21 |
| bytes | bytes::bytes::Bytes | src/client/conn/http1.rs:46:4 |
| bytes | bytes::bytes::Bytes | src/ext/h1_reason_phrase.rs:110:0 |
| bytes | bytes::bytes::Bytes | src/ext/h1_reason_phrase.rs:57:4 |
| bytes | bytes::bytes::Bytes | src/ext/h1_reason_phrase.rs:98:0 |
| bytes | bytes::bytes::Bytes | src/server/conn/http1.rs:65:4 |
| bytes | bytes::bytes::Bytes | src/upgrade.rs:92:4 |
| http | http::header | src/lib.rs:61:22 |
| http | http::header::map::HeaderMap | src/lib.rs:64:0 |
| http | http::method::Method | src/lib.rs:61:30 |
| http | http::request::Request | src/client/conn/http1.rs:188:4 |
| http | http::request::Request | src/client/conn/http2.rs:133:4 |
| http | http::request::Request | src/lib.rs:61:38 |
| http | http::request::Request | src/service/util.rs:30:0 |
| http | http::response::Response | src/client/conn/http1.rs:188:4 |
| http | http::response::Response | src/client/conn/http2.rs:133:4 |
| http | http::response::Response | src/lib.rs:61:47 |
| http | http::status::StatusCode | src/lib.rs:61:57 |
| http | http::uri::Uri | src/lib.rs:61:69 |
| http | http::version::Version | src/lib.rs:61:74 |
| http_body | http_body::Body | src/body/incoming.rs:154:0 |
| http_body | http_body::Body | src/body/mod.rs:18:0 |
| http_body | http_body::Body | src/client/conn/http1.rs:121:0 |
| http_body | http_body::Body | src/client/conn/http1.rs:121:0 |
| http_body | http_body::Body | src/client/conn/http1.rs:168:0 |
| http_body | http_body::Body | src/client/conn/http1.rs:248:0 |
| http_body | http_body::Body | src/client/conn/http1.rs:258:0 |
| http_body | http_body::Body | src/client/conn/http1.rs:258:0 |
| http_body | http_body::Body | src/client/conn/http1.rs:505:4 |
| http_body | http_body::Body | src/client/conn/http1.rs:505:4 |
| http_body | http_body::Body | src/client/conn/http1.rs:55:0 |
| http_body | http_body::Body | src/client/conn/http1.rs:55:0 |
| http_body | http_body::Body | src/client/conn/http1.rs:63:0 |
| http_body | http_body::Body | src/client/conn/http1.rs:63:0 |
| http_body | http_body::Body | src/client/conn/http2.rs:113:0 |
| http_body | http_body::Body | src/client/conn/http2.rs:193:0 |
| http_body | http_body::Body | src/client/conn/http2.rs:193:0 |
| http_body | http_body::Body | src/client/conn/http2.rs:214:0 |
| http_body | http_body::Body | src/client/conn/http2.rs:224:0 |
| http_body | http_body::Body | src/client/conn/http2.rs:224:0 |
| http_body | http_body::Body | src/client/conn/http2.rs:38:0 |
| http_body | http_body::Body | src/client/conn/http2.rs:38:0 |
| http_body | http_body::Body | src/client/conn/http2.rs:402:4 |
| http_body | http_body::Body | src/client/conn/http2.rs:402:4 |
| http_body | http_body::Body | src/client/conn/http2.rs:60:0 |
| http_body | http_body::Body | src/client/conn/http2.rs:60:0 |
| http_body | http_body::Body | src/server/conn/http1.rs:172:0 |
| http_body | http_body::Body | src/server/conn/http1.rs:172:0 |
| http_body | http_body::Body | src/server/conn/http1.rs:21:0 |
| http_body | http_body::Body | src/server/conn/http1.rs:358:4 |
| http_body | http_body::Body | src/server/conn/http1.rs:82:0 |
| http_body | http_body::Body | src/server/conn/http1.rs:82:0 |
| http_body | http_body::Body | src/server/conn/http2.rs:18:0 |
| http_body | http_body::Body | src/server/conn/http2.rs:255:4 |
| http_body | http_body::Body | src/server/conn/http2.rs:255:4 |
| http_body | http_body::Body | src/server/conn/http2.rs:50:0 |
| http_body | http_body::Body | src/server/conn/http2.rs:50:0 |
| http_body | http_body::Body | src/server/conn/http2.rs:74:0 |
| http_body | http_body::Body | src/server/conn/http2.rs:74:0 |
| http_body | http_body::frame::Frame | src/body/mod.rs:19:0 |
| http_body | http_body::size_hint::SizeHint | src/body/mod.rs:20:0 |
| tokio | tokio::io::async_read::AsyncRead | src/client/conn/http1.rs:121:0 |
| tokio | tokio::io::async_read::AsyncRead | src/client/conn/http1.rs:248:0 |
| tokio | tokio::io::async_read::AsyncRead | src/client/conn/http1.rs:258:0 |
| tokio | tokio::io::async_read::AsyncRead | src/client/conn/http1.rs:505:4 |
| tokio | tokio::io::async_read::AsyncRead | src/client/conn/http1.rs:55:0 |
| tokio | tokio::io::async_read::AsyncRead | src/client/conn/http1.rs:63:0 |
| tokio | tokio::io::async_read::AsyncRead | src/client/conn/http2.rs:193:0 |
| tokio | tokio::io::async_read::AsyncRead | src/client/conn/http2.rs:214:0 |
| tokio | tokio::io::async_read::AsyncRead | src/client/conn/http2.rs:224:0 |
| tokio | tokio::io::async_read::AsyncRead | src/client/conn/http2.rs:38:0 |
| tokio | tokio::io::async_read::AsyncRead | src/client/conn/http2.rs:402:4 |
| tokio | tokio::io::async_read::AsyncRead | src/client/conn/http2.rs:60:0 |
| tokio | tokio::io::async_read::AsyncRead | src/server/conn/http1.rs:172:0 |
| tokio | tokio::io::async_read::AsyncRead | src/server/conn/http1.rs:358:4 |
| tokio | tokio::io::async_read::AsyncRead | src/server/conn/http1.rs:82:0 |
| tokio | tokio::io::async_read::AsyncRead | src/server/conn/http2.rs:255:4 |
| tokio | tokio::io::async_read::AsyncRead | src/server/conn/http2.rs:50:0 |
| tokio | tokio::io::async_read::AsyncRead | src/server/conn/http2.rs:74:0 |
| tokio | tokio::io::async_read::AsyncRead | src/upgrade.rs:136:4 |
| tokio | tokio::io::async_read::AsyncRead | src/upgrade.rs:151:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/client/conn/http1.rs:121:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/client/conn/http1.rs:248:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/client/conn/http1.rs:258:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/client/conn/http1.rs:505:4 |
| tokio | tokio::io::async_write::AsyncWrite | src/client/conn/http1.rs:55:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/client/conn/http1.rs:63:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/client/conn/http2.rs:193:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/client/conn/http2.rs:214:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/client/conn/http2.rs:224:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/client/conn/http2.rs:38:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/client/conn/http2.rs:402:4 |
| tokio | tokio::io::async_write::AsyncWrite | src/client/conn/http2.rs:60:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/server/conn/http1.rs:172:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/server/conn/http1.rs:358:4 |
| tokio | tokio::io::async_write::AsyncWrite | src/server/conn/http1.rs:82:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/server/conn/http2.rs:255:4 |
| tokio | tokio::io::async_write::AsyncWrite | src/server/conn/http2.rs:50:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/server/conn/http2.rs:74:0 |
| tokio | tokio::io::async_write::AsyncWrite | src/upgrade.rs:136:4 |
| tokio | tokio::io::async_write::AsyncWrite | src/upgrade.rs:161:0 |
Those are purposefully exposed, so yea, let's add em to the allowlist :)