add cargo hakari and chef to build process

This commit is contained in:
Bryan Stitt 2023-06-27 11:59:49 -07:00
parent be22521d88
commit 272f7ce800
19 changed files with 419 additions and 16 deletions

@ -15,3 +15,6 @@ rustdocflags = [
# uuid unstable is needed for zerocopy deserialize
"--cfg", "uuid_unstable",
]
[registries.crates-io]
protocol = "sparse"

23
.config/hakari.toml Normal file

@ -0,0 +1,23 @@
# This file contains settings for `cargo hakari`.
# See https://docs.rs/cargo-hakari/latest/cargo_hakari/config for a full list of options.
hakari-package = "workspace-hack"
# Format version for hakari's output. Version 4 requires cargo-hakari 0.9.22 or above.
dep-format-version = "4"
# Setting workspace.resolver = "2" in the root Cargo.toml is HIGHLY recommended.
# Hakari works much better with the new feature resolver.
# For more about the new feature resolver, see:
# https://blog.rust-lang.org/2021/03/25/Rust-1.51.0.html#cargos-new-feature-resolver
resolver = "2"
# Add triples corresponding to platforms commonly used by developers here.
# https://doc.rust-lang.org/rustc/platform-support.html
platforms = [
"aarch64-unknown-linux-gnu",
"x86_64-unknown-linux-gnu",
]
# Write out exact versions rather than a semver range. (Defaults to false.)
# exact-versions = true

117
Cargo.lock generated

@ -1431,6 +1431,7 @@ dependencies = [
"redis-rate-limiter",
"tokio",
"tracing",
"workspace-hack",
]
[[package]]
@ -1660,6 +1661,7 @@ dependencies = [
"serde",
"ulid",
"uuid 1.4.0",
"workspace-hack",
]
[[package]]
@ -3104,6 +3106,7 @@ dependencies = [
"tokio",
"tracing",
"watermill",
"workspace-hack",
]
[[package]]
@ -3276,6 +3279,7 @@ version = "0.32.0"
dependencies = [
"sea-orm-migration",
"tokio",
"workspace-hack",
]
[[package]]
@ -3667,6 +3671,15 @@ version = "0.1.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ff011a302c396a5197692431fc1948019154afc178baf7d8e37367442a4601cf"
[[package]]
name = "openssl-src"
version = "111.25.3+1.1.1t"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "924757a6a226bf60da5f7dd0311a34d2b52283dd82ddeb103208ddc66362f80c"
dependencies = [
"cc",
]
[[package]]
name = "openssl-sys"
version = "0.9.88"
@ -3675,6 +3688,7 @@ checksum = "c2ce0f250f34a308dcfdbb351f511359857d4ed2134ba715a4eadd46e1ffd617"
dependencies = [
"cc",
"libc",
"openssl-src",
"pkg-config",
"vcpkg",
]
@ -3866,6 +3880,7 @@ version = "0.1.0"
dependencies = [
"ethers",
"glob",
"workspace-hack",
]
[[package]]
@ -4374,6 +4389,7 @@ name = "rate-counter"
version = "0.1.0"
dependencies = [
"tokio",
"workspace-hack",
]
[[package]]
@ -4481,6 +4497,7 @@ dependencies = [
"chrono",
"deadpool-redis",
"tokio",
"workspace-hack",
]
[[package]]
@ -6979,6 +6996,7 @@ dependencies = [
"ulid",
"url",
"uuid 1.4.0",
"workspace-hack",
]
[[package]]
@ -7206,6 +7224,105 @@ dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "workspace-hack"
version = "0.1.0"
dependencies = [
"Inflector",
"allocator-api2",
"anyhow",
"arrayvec",
"backtrace",
"bitflags 1.3.2",
"byteorder",
"bytes",
"cc",
"chrono",
"clap",
"crossbeam-utils",
"derive_more",
"digest 0.10.7",
"ecdsa",
"either",
"elliptic-curve",
"ethbloom",
"ethers",
"ethers-contract",
"ethers-contract-abigen",
"ethers-etherscan",
"ethers-middleware",
"ethers-providers",
"futures",
"futures-channel",
"futures-core",
"futures-io",
"futures-sink",
"futures-task",
"futures-util",
"generic-array",
"getrandom",
"hashbrown 0.14.0",
"heck 0.4.1",
"hyper",
"indexmap 1.9.3",
"io-lifetimes",
"ipnet",
"k256",
"lazy_static",
"libc",
"lock_api",
"log",
"memchr",
"num-bigint",
"num-integer",
"num-iter",
"num-traits",
"once_cell",
"openssl-sys",
"parking_lot 0.12.1",
"parking_lot_core 0.9.8",
"rand",
"rand_core",
"rdkafka",
"rdkafka-sys",
"regex",
"regex-syntax 0.7.2",
"reqwest",
"rust_decimal",
"rustix",
"sea-orm",
"sea-query",
"sea-query-binder",
"serde",
"serde_json",
"sha1",
"sha2 0.10.6",
"sha3",
"signal-hook",
"spki 0.7.2",
"sqlx",
"sqlx-core",
"sqlx-macros",
"subtle",
"syn 1.0.109",
"syn 2.0.22",
"time 0.3.22",
"time-macros",
"tokio",
"tokio-stream",
"tokio-util",
"tower",
"tracing",
"tracing-core",
"tracing-subscriber",
"ulid",
"unicode-bidi",
"unicode-normalization",
"url",
"uuid 1.4.0",
"zeroize",
]
[[package]]
name = "ws_stream_wasm"
version = "0.7.4"

@ -8,6 +8,7 @@ members = [
"rate-counter",
"redis-rate-limiter",
"web3_proxy",
"workspace-hack",
]
resolver = "2"
@ -20,3 +21,4 @@ inherits = "release"
# spend longer compiling for a slightly faster binary
codegen-units = 1

@ -1,6 +1,7 @@
FROM debian:bullseye-slim as builder
FROM debian:bullseye-slim as rust
WORKDIR /app
ENV CARGO_INCREMENTAL 0
ENV CARGO_TERM_COLOR always
ENV PATH "/root/.foundry/bin:/root/.cargo/bin:${PATH}"
@ -19,12 +20,10 @@ RUN --mount=type=cache,target=/var/cache/apt,sharing=locked \
liblz4-dev \
libpthread-stubs0-dev \
libsasl2-dev \
libssl-dev \
libzstd-dev \
make \
pkg-config
# install rustup
RUN --mount=type=cache,target=/usr/local/cargo/git \
--mount=type=cache,target=/usr/local/cargo/registry \
@ -38,36 +37,60 @@ RUN --mount=type=cache,target=/usr/local/cargo/git \
\
cargo check || [ "$?" -eq 101 ]
# a next-generation test runner for Rust projects.
# We only pay the installation cost once,
# it will be cached from the second build onwards
# TODO: more mount type cache?
# chef splits up the rust build to hopefully cache better
# hakari manages a 'workspace-hack' to hopefully build faster
# nextest runs tests in parallel
# We only pay the installation cost once, it will be cached from the second build onwards
RUN --mount=type=cache,target=/usr/local/cargo/git \
--mount=type=cache,target=/usr/local/cargo/registry \
\
cargo install --locked cargo-nextest
cargo install --locked cargo-chef cargo-hakari cargo-nextest
# foundry is needed to run tests
# TODO: do this in a seperate FROM and COPY it in
# foundry/anvil are needed to run tests
RUN --mount=type=cache,target=/usr/local/cargo/git \
--mount=type=cache,target=/usr/local/cargo/registry \
\
curl -L https://foundry.paradigm.xyz | bash && foundryup
# changing our features doesn't change any of the steps above
ENV WEB3_PROXY_FEATURES "rdkafka-src,connectinfo"
FROM builder as build_tests
# chef plan
RUN --mount=type=bind,target=.,rw \
--mount=type=cache,target=/usr/local/cargo/git \
--mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/app/target \
\
cargo chef prepare --recipe-path /recipe.json
FROM rust as build_tests
# chef cook the test app
RUN --mount=type=cache,target=/usr/local/cargo/git \
--mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/app/target,id=build_tests_target \
\
cargo chef cook --recipe-path /recipe.json
# test the application with cargo-nextest
RUN --mount=type=bind,target=.,rw \
--mount=type=cache,target=/usr/local/cargo/git \
--mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/app/target,sharing=private \
--mount=type=cache,target=/app/target,id=build_tests_target \
\
RUST_LOG=web3_proxy=trace,info cargo --locked nextest run --features "$WEB3_PROXY_FEATURES" --no-default-features && \
cargo hakari generate --diff && \
cargo hakari manage-deps --dry-run && \
RUST_LOG=web3_proxy=trace,info cargo --locked nextest run --profile ci --features "$WEB3_PROXY_FEATURES" --no-default-features && \
touch /test_success
FROM builder as build_app
FROM rust as build_app
# chef cook the app
RUN --mount=type=cache,target=/usr/local/cargo/git \
--mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/app/target,id=build_app_target \
\
cargo chef cook --release --recipe-path /recipe.json
# build the application
# using a "release" profile (which install does by default) is **very** important
@ -75,7 +98,7 @@ FROM builder as build_app
RUN --mount=type=bind,target=.,rw \
--mount=type=cache,target=/usr/local/cargo/git \
--mount=type=cache,target=/usr/local/cargo/registry \
--mount=type=cache,target=/app/target,sharing=private \
--mount=type=cache,target=/app/target,id=build_app_target \
\
cargo install \
--features "$WEB3_PROXY_FEATURES" \

@ -47,6 +47,15 @@ Quickly run tests:
RUST_LOG=web3_proxy=trace,info cargo nextest run
```
Keep workspace-hack package up-to-date:
```
cargo install cargo-hakari --locked
cargo hakari generate
cargo hakari verify
```
## Common commands
Create a user:

@ -13,3 +13,4 @@ log = "0.4.19"
moka = { version = "0.11.2", features = ["future"] }
tokio = "1.28.2"
tracing = "0.1.37"
workspace-hack = { version = "0.1", path = "../workspace-hack" }

@ -15,3 +15,4 @@ sea-orm = "0.11.3"
serde = "1.0.164"
ulid = "1.0.0"
uuid = "1.4.0"
workspace-hack = { version = "0.1", path = "../workspace-hack" }

@ -13,6 +13,7 @@ serde = { version = "1.0.164", features = [] }
tokio = { version = "1.28.2", features = ["full"] }
tracing = "0.1.37"
watermill = "0.1.1"
workspace-hack = { version = "0.1", path = "../workspace-hack" }
[dev-dependencies]
tokio = { version = "1.28.2", features = ["full", "test-util"] }

@ -10,6 +10,7 @@ path = "src/lib.rs"
[dependencies]
tokio = { version = "1.28.2", features = ["full", "tracing"] }
workspace-hack = { version = "0.1", path = "../workspace-hack" }
[dependencies.sea-orm-migration]
version = "0.11.3"

@ -11,3 +11,4 @@ glob = "0.3.1"
[dependencies]
ethers = { version = "2.0.7", default-features = false }
workspace-hack = { version = "0.1", path = "../workspace-hack" }

@ -11,6 +11,7 @@ log = "0.4.18"
quick_cache = "0.3.0"
serde = "1"
tokio = { version = "1.28.2", features = ["full"] }
workspace-hack = { version = "0.1", path = "../workspace-hack" }
[dev-dependencies]
tokio = { version = "1.28.2", features = ["full", "test-util"] }

@ -6,3 +6,4 @@ edition = "2021"
[dependencies]
tokio = { version = "1.28.2", features = ["time"] }
workspace-hack = { version = "0.1", path = "../workspace-hack" }

@ -9,3 +9,4 @@ anyhow = "1.0.71"
chrono = "0.4.26"
deadpool-redis = { version = "0.12.0", features = ["rt_tokio_1", "serde"] }
tokio = "1.28.2"
workspace-hack = { version = "0.1", path = "../workspace-hack" }

@ -11,7 +11,7 @@ default = ["connectinfo", "deadlock_detection"]
deadlock_detection = ["parking_lot/deadlock_detection"]
mimalloc = ["dep:mimalloc"]
tokio-console = ["dep:tokio-console", "dep:console-subscriber"]
rdkafka-src = ["rdkafka/cmake-build", "rdkafka/libz", "rdkafka/ssl", "rdkafka/zstd-pkg-config"]
rdkafka-src = ["rdkafka/cmake-build", "rdkafka/libz", "rdkafka/ssl-vendored", "rdkafka/zstd-pkg-config"]
connectinfo = []
[dependencies]
@ -103,6 +103,7 @@ ulid = { version = "1.0.0", features = ["rand", "uuid", "serde"] }
url = { version = "2.4.0" }
uuid = { version = "1.4.0", default-features = false, features = ["fast-rng", "v4", "zerocopy"] }
derivative = "2.2.0"
workspace-hack = { version = "0.1", path = "../workspace-hack" }
[dev-dependencies]
test-log = { version = "0.2.12", default-features = false, features = ["trace"] }

4
workspace-hack/.gitattributes vendored Normal file

@ -0,0 +1,4 @@
# Avoid putting conflict markers in the generated Cargo.toml file, since their presence breaks
# Cargo.
# Also do not check out the file as CRLF on Windows, as that's what hakari needs.
Cargo.toml merge=binary -crlf

210
workspace-hack/Cargo.toml Normal file

@ -0,0 +1,210 @@
# This file is generated by `cargo hakari`.
# To regenerate, run:
# cargo hakari generate
[package]
name = "workspace-hack"
version = "0.1.0"
description = "workspace-hack package, managed by hakari"
# You can choose to publish this crate: see https://docs.rs/cargo-hakari/latest/cargo_hakari/publishing.
publish = false
# The parts of the file between the BEGIN HAKARI SECTION and END HAKARI SECTION comments
# are managed by hakari.
### BEGIN HAKARI SECTION
[dependencies]
Inflector = { version = "0.11" }
allocator-api2 = { version = "0.2", default-features = false, features = ["alloc", "nightly"] }
anyhow = { version = "1", features = ["backtrace"] }
arrayvec = { version = "0.7", default-features = false, features = ["std"] }
backtrace = { version = "0.3", features = ["gimli-symbolize"] }
bitflags = { version = "1" }
byteorder = { version = "1" }
bytes = { version = "1", features = ["serde"] }
chrono = { version = "0.4", features = ["serde"] }
clap = { version = "3", features = ["cargo", "derive", "env"] }
crossbeam-utils = { version = "0.8" }
digest = { version = "0.10", features = ["mac", "oid", "std"] }
ecdsa = { version = "0.16", default-features = false, features = ["pkcs8", "signing", "std", "verifying"] }
either = { version = "1" }
elliptic-curve = { version = "0.13", default-features = false, features = ["arithmetic", "digest", "hazmat", "pkcs8", "std"] }
ethbloom = { version = "0.13", features = ["codec"] }
ethers = { version = "2", features = ["ws"] }
ethers-contract = { version = "2", default-features = false, features = ["abigen", "rustls"] }
ethers-contract-abigen = { version = "2", default-features = false, features = ["rustls"] }
ethers-etherscan = { version = "2", default-features = false, features = ["rustls"] }
ethers-middleware = { version = "2", default-features = false, features = ["rustls"] }
ethers-providers = { version = "2", default-features = false, features = ["rustls", "ws"] }
futures = { version = "0.3" }
futures-channel = { version = "0.3", features = ["sink"] }
futures-core = { version = "0.3" }
futures-io = { version = "0.3" }
futures-sink = { version = "0.3" }
futures-task = { version = "0.3" }
futures-util = { version = "0.3", features = ["channel", "io", "sink"] }
generic-array = { version = "0.14", default-features = false, features = ["more_lengths", "zeroize"] }
getrandom = { version = "0.2", default-features = false, features = ["js", "rdrand", "std"] }
hashbrown = { version = "0.14", features = ["nightly", "raw", "serde"] }
indexmap = { version = "1", default-features = false, features = ["std"] }
io-lifetimes = { version = "1" }
k256 = { version = "0.13" }
lazy_static = { version = "1", default-features = false, features = ["spin_no_std"] }
lock_api = { version = "0.4", features = ["arc_lock", "nightly"] }
log = { version = "0.4", default-features = false, features = ["kv_unstable", "std"] }
memchr = { version = "2" }
num-bigint = { version = "0.4" }
num-integer = { version = "0.1", features = ["i128"] }
num-iter = { version = "0.1", default-features = false, features = ["i128", "std"] }
num-traits = { version = "0.2", features = ["i128", "libm"] }
parking_lot = { version = "0.12", features = ["arc_lock", "deadlock_detection", "nightly"] }
parking_lot_core = { version = "0.9", default-features = false, features = ["deadlock_detection", "nightly"] }
rand = { version = "0.8", features = ["serde1", "small_rng"] }
rand_core = { version = "0.6", default-features = false, features = ["serde1", "std"] }
rdkafka = { version = "0.32", features = ["cmake-build", "ssl-vendored", "tracing", "zstd-pkg-config"] }
rdkafka-sys = { version = "4", default-features = false, features = ["cmake-build", "libz", "ssl-vendored", "zstd-pkg-config"] }
regex = { version = "1" }
regex-syntax = { version = "0.7" }
reqwest = { version = "0.11", features = ["blocking", "deflate", "gzip", "json", "native-tls", "rustls-tls", "socks", "stream"] }
rust_decimal = { version = "1", features = ["maths"] }
sea-orm = { version = "0.11", features = ["runtime-tokio-rustls", "sqlx-mysql"] }
sea-query = { version = "0.28", features = ["thread-safe", "with-bigdecimal", "with-chrono", "with-json", "with-rust_decimal", "with-time", "with-uuid"] }
sea-query-binder = { version = "0.3", default-features = false, features = ["runtime-tokio-rustls", "sqlx-mysql", "with-bigdecimal", "with-chrono", "with-json", "with-rust_decimal", "with-time", "with-uuid"] }
serde = { version = "1", features = ["alloc", "derive", "rc"] }
serde_json = { version = "1", features = ["arbitrary_precision", "raw_value", "unbounded_depth"] }
sha1 = { version = "0.10" }
sha2 = { version = "0.10" }
sha3 = { version = "0.10" }
spki = { version = "0.7", default-features = false, features = ["std"] }
sqlx = { version = "0.6", default-features = false, features = ["bigdecimal", "chrono", "decimal", "json", "mysql", "runtime-tokio-rustls", "time", "uuid"] }
sqlx-core = { version = "0.6", default-features = false, features = ["any", "bigdecimal", "chrono", "decimal", "json", "mysql", "runtime-tokio-rustls", "time", "uuid"] }
subtle = { version = "2", default-features = false, features = ["i128"] }
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "full", "visit", "visit-mut"] }
time = { version = "0.3", features = ["formatting", "macros", "parsing", "serde"] }
tokio = { version = "1", features = ["full", "test-util", "tracing"] }
tokio-stream = { version = "0.1", features = ["fs", "net", "sync"] }
tokio-util = { version = "0.7", features = ["codec", "io"] }
tower = { version = "0.4", features = ["balance", "buffer", "limit", "timeout", "util"] }
tracing = { version = "0.1", features = ["log"] }
tracing-core = { version = "0.1" }
tracing-subscriber = { version = "0.3", features = ["env-filter", "parking_lot"] }
ulid = { version = "1", features = ["serde", "uuid"] }
unicode-bidi = { version = "0.3" }
unicode-normalization = { version = "0.1" }
url = { version = "2", features = ["serde"] }
uuid = { version = "1", features = ["fast-rng", "serde", "v4", "zerocopy"] }
zeroize = { version = "1" }
[build-dependencies]
Inflector = { version = "0.11" }
allocator-api2 = { version = "0.2", default-features = false, features = ["alloc", "nightly"] }
anyhow = { version = "1", features = ["backtrace"] }
arrayvec = { version = "0.7", default-features = false, features = ["std"] }
backtrace = { version = "0.3", features = ["gimli-symbolize"] }
bitflags = { version = "1" }
byteorder = { version = "1" }
bytes = { version = "1", features = ["serde"] }
cc = { version = "1", default-features = false, features = ["parallel"] }
chrono = { version = "0.4", features = ["serde"] }
crossbeam-utils = { version = "0.8" }
derive_more = { version = "0.99", features = ["nightly"] }
digest = { version = "0.10", features = ["mac", "oid", "std"] }
ecdsa = { version = "0.16", default-features = false, features = ["pkcs8", "signing", "std", "verifying"] }
either = { version = "1" }
elliptic-curve = { version = "0.13", default-features = false, features = ["arithmetic", "digest", "hazmat", "pkcs8", "std"] }
ethbloom = { version = "0.13", features = ["codec"] }
ethers = { version = "2", features = ["ws"] }
ethers-contract = { version = "2", default-features = false, features = ["abigen", "rustls"] }
ethers-contract-abigen = { version = "2", default-features = false, features = ["rustls"] }
ethers-etherscan = { version = "2", default-features = false, features = ["rustls"] }
ethers-middleware = { version = "2", default-features = false, features = ["rustls"] }
ethers-providers = { version = "2", default-features = false, features = ["rustls", "ws"] }
futures-channel = { version = "0.3", features = ["sink"] }
futures-core = { version = "0.3" }
futures-io = { version = "0.3" }
futures-sink = { version = "0.3" }
futures-task = { version = "0.3" }
futures-util = { version = "0.3", features = ["channel", "io", "sink"] }
generic-array = { version = "0.14", default-features = false, features = ["more_lengths", "zeroize"] }
getrandom = { version = "0.2", default-features = false, features = ["js", "rdrand", "std"] }
hashbrown = { version = "0.14", features = ["nightly", "raw", "serde"] }
heck = { version = "0.4", features = ["unicode"] }
indexmap = { version = "1", default-features = false, features = ["std"] }
k256 = { version = "0.13" }
lazy_static = { version = "1", default-features = false, features = ["spin_no_std"] }
lock_api = { version = "0.4", features = ["arc_lock", "nightly"] }
log = { version = "0.4", default-features = false, features = ["kv_unstable", "std"] }
memchr = { version = "2" }
num-bigint = { version = "0.4" }
num-integer = { version = "0.1", features = ["i128"] }
num-iter = { version = "0.1", default-features = false, features = ["i128", "std"] }
num-traits = { version = "0.2", features = ["i128", "libm"] }
parking_lot = { version = "0.12", features = ["arc_lock", "deadlock_detection", "nightly"] }
parking_lot_core = { version = "0.9", default-features = false, features = ["deadlock_detection", "nightly"] }
rand = { version = "0.8", features = ["serde1", "small_rng"] }
rand_core = { version = "0.6", default-features = false, features = ["serde1", "std"] }
regex = { version = "1" }
regex-syntax = { version = "0.7" }
reqwest = { version = "0.11", features = ["blocking", "deflate", "gzip", "json", "native-tls", "rustls-tls", "socks", "stream"] }
rust_decimal = { version = "1", features = ["maths"] }
serde = { version = "1", features = ["alloc", "derive", "rc"] }
serde_json = { version = "1", features = ["arbitrary_precision", "raw_value", "unbounded_depth"] }
sha1 = { version = "0.10" }
sha2 = { version = "0.10" }
sha3 = { version = "0.10" }
spki = { version = "0.7", default-features = false, features = ["std"] }
sqlx-core = { version = "0.6", default-features = false, features = ["any", "bigdecimal", "chrono", "decimal", "json", "mysql", "runtime-tokio-rustls", "time", "uuid"] }
sqlx-macros = { version = "0.6", default-features = false, features = ["bigdecimal", "chrono", "decimal", "json", "mysql", "runtime-tokio-rustls", "time", "uuid"] }
subtle = { version = "2", default-features = false, features = ["i128"] }
syn-dff4ba8e3ae991db = { package = "syn", version = "1", features = ["extra-traits", "fold", "full", "visit", "visit-mut"] }
syn-f595c2ba2a3f28df = { package = "syn", version = "2", features = ["extra-traits", "full", "visit", "visit-mut"] }
time = { version = "0.3", features = ["formatting", "macros", "parsing", "serde"] }
time-macros = { version = "0.2", default-features = false, features = ["formatting", "parsing", "serde"] }
tokio = { version = "1", features = ["full", "test-util", "tracing"] }
tokio-stream = { version = "0.1", features = ["fs", "net", "sync"] }
tokio-util = { version = "0.7", features = ["codec", "io"] }
tracing = { version = "0.1", features = ["log"] }
tracing-core = { version = "0.1" }
unicode-bidi = { version = "0.3" }
unicode-normalization = { version = "0.1" }
url = { version = "2", features = ["serde"] }
uuid = { version = "1", features = ["fast-rng", "serde", "v4", "zerocopy"] }
zeroize = { version = "1" }
[target.aarch64-unknown-linux-gnu.dependencies]
hyper = { version = "0.14", features = ["full", "nightly"] }
ipnet = { version = "2", features = ["json"] }
libc = { version = "0.2", features = ["extra_traits"] }
once_cell = { version = "1", features = ["unstable"] }
openssl-sys = { version = "0.9", default-features = false, features = ["vendored"] }
rustix = { version = "0.37", features = ["fs", "termios"] }
signal-hook = { version = "0.3" }
[target.aarch64-unknown-linux-gnu.build-dependencies]
hyper = { version = "0.14", features = ["full", "nightly"] }
io-lifetimes = { version = "1" }
ipnet = { version = "2", features = ["json"] }
libc = { version = "0.2", features = ["extra_traits"] }
once_cell = { version = "1", features = ["unstable"] }
openssl-sys = { version = "0.9", default-features = false, features = ["vendored"] }
rustix = { version = "0.37", features = ["fs", "termios"] }
[target.x86_64-unknown-linux-gnu.dependencies]
hyper = { version = "0.14", features = ["full", "nightly"] }
ipnet = { version = "2", features = ["json"] }
libc = { version = "0.2", features = ["extra_traits"] }
once_cell = { version = "1", features = ["unstable"] }
openssl-sys = { version = "0.9", default-features = false, features = ["vendored"] }
rustix = { version = "0.37", features = ["fs", "termios"] }
signal-hook = { version = "0.3" }
[target.x86_64-unknown-linux-gnu.build-dependencies]
hyper = { version = "0.14", features = ["full", "nightly"] }
io-lifetimes = { version = "1" }
ipnet = { version = "2", features = ["json"] }
libc = { version = "0.2", features = ["extra_traits"] }
once_cell = { version = "1", features = ["unstable"] }
openssl-sys = { version = "0.9", default-features = false, features = ["vendored"] }
rustix = { version = "0.37", features = ["fs", "termios"] }
### END HAKARI SECTION

2
workspace-hack/build.rs Normal file

@ -0,0 +1,2 @@
// A build script is required for cargo to consider build dependencies.
fn main() {}

@ -0,0 +1 @@
// This is a stub lib.rs.