# Copyright 2018 The Fuchsia Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

# -------------- READ BEFORE EDITING ---------------
# This file describes the third-party packages used by Rust code and how they should be built.
#
# Every edit to this file should be followed by `fx update-rustc-third-party`, a build,
# and then `fx update-rustc-crate-map --output third_party/rust_crates/crate_map.json`.
#
# More information is available in docs/development/languages/rust/third_party.md.

[package]
name = "fuchsia-third-party"
version = "0.1.0"
authors = ["cramertj <cramertj@google.com>"]

[dependencies]
# Keep this sorted alphabetically, please.
bitfield = "0.13"
bitflags = "1"
byteorder = { version = "1", features = ["i128"] }
clap = "2.33"
criterion = { version = "0.2", default-features = false }
csv = "1.0.7"
failure = "0.1.1"
futures-preview = { version = "=0.3.0-alpha.17", features = ["async-await", "io-compat", "nightly"] }
futures-test-preview = "=0.3.0-alpha.17"
heck = "0.3.1"
json5 = "0.2.4"
lazy_static = "1"
libc = "0.2"
log = { version = "0.4.4", features = ["std"] }
matches = "0.1.8"
memchr = "2.0"
nom = { version = "5.0.0", default-features = false, features = ["std", "regexp_macros"] }
parking_lot = "0.7.1"
pest = "2.1"
pest_derive = "2.1"
png = "0.14" # saved for future use
pretty_assertions = "0.5.1"
proc-macro-hack = "0.5.7"
rand = "0.6"
rand_core = "0.4.0"
rand_os = "0.1.2"
regex = "1.0.6"
rayon = "1.1"
ring = "0.14"
scopeguard = "0.3.3"
serde = "1"
serde_derive = "1"
serde_json = "1"
slab = "0.4"
structopt = "0.2.14"
tempfile = "3"
timebomb = "0.1.2"
url = "1.7.0"
uuid = "0.7.2" # move ?
valico = "2.4.2"
xml-rs = "0.8"
# move once target-side tests of host-side code have been removed
# in wayland/scanner:lib and unicode_block_generator :
num = "0.2"
unic-char-range = "0.9"
unic-ucd-block = "0.9"

# Target-side only dependencies
[target.'cfg(target_os = "fuchsia")'.dependencies]
base64 = "0.9"
bincode = "1"
bytes = "0.4.7"
chrono = "0.4.2"
crossbeam = "0.5"
ct-logs = "0.5.1"
data-encoding = "2.1.2"
derivative = "1.0.2"
derp = "0.0.11"
euclid = "0.19"
eui48 = { version = "0.4.6", features = ["serde", "disp_hexstring"] }
freetype = "0.4" # saved for future use
getopts = "0.2"
glob = "0.3.0"
harfbuzz = { version = "0.3.1", default-features = false } # saved for future use
hex = "0.3.2"
http = "0.1"
hyper = { version = "0.12.13", default-features = false }
hyper-rustls = { version = "0.16.1", default-features = false }
id_tree = "1.5"
itertools = "0.8"
itoa = "0.4"
maplit = "1.0"
net2 = "0.2"
num-derive = "0.2.4"
num-bigint = { version = "0.2", features = ["rand"] }
num-traits= "0.2.5"
openat = "0.1.17"
owning_ref = "0.4.0"
paste = "0.1"
pin-utils = "=0.1.0-alpha.4"
prettytable-rs = "0.8.0"
proc-macro-nested = "0.1.2"
proptest = "0.9.3"
proptest-derive = "0.1.1"
rand_core = "0.4.0"
rand_os = "0.1.2"
rand_xorshift = "0.1.1"
rouille = "3.0.0"
rust-crypto = "0.2"
rustls = { version = "0.15", features = ["dangerous_configuration"] }
rusttype = "0.7.3"
serde_repr = "0.1.3"
smallvec = "0.6"
static_assertions = "0.3.1"
time = "0.1"
unicase = "2.2.0"
unicode-normalization = "0.1"
unicode-segmentation = "1.0"
unicode-width = "0.1.3"
untrusted = "0.6.2"
utf8parse = "0.1"
void = "1.0.2"
vte = "0.3"
walkdir = "2.2.7"
webpki = "0.19.1"
xi-core-lib = { version = "0.2.0", default-features = false } # disable "notify" crate
xi-rpc = "0.2.0"

# Host-side only dependencies
[target.'cfg(not(target_os = "fuchsia"))'.dependencies]
flate2 = "1.0.7"
handlebars = "2.0.0-beta.2"
indoc = "0.3.3"
proc-macro2 = "0.4.24"
quote = "0.6.10"
syn = { version = "0.15.25", features = ["full", "visit-mut"] }
synstructure = "0.10.1"
tar = "0.4.25"

# For crates that we don't want to vendor, create a dummy package in tiny_mirrors/ (see existing
# examples).
[patch.crates-io]
# Keep this sorted alphabetically, please.
backtrace-sys = { path = "tiny_mirrors/backtrace-sys" }
cmake = { path = "tiny_mirrors/cmake"}
fuchsia-cprng = { path = "../../garnet/public/rust/fuchsia-cprng" }
pkg-config = { path = "tiny_mirrors/pkg-config" }
rust-crypto = { path = "../rust-mirrors/rust-crypto" }
servo-freetype-sys = { path = "tiny_mirrors/servo-freetype-sys" }
winapi = { path = "tiny_mirrors/winapi" }
winapi-util = { path = "tiny_mirrors/winapi-util" }
xi-core-lib = { path = "../rust-mirrors/xi-editor/rust/core-lib" }
xi-rope = { path = "../rust-mirrors/xi-editor/rust/rope" }
xi-rpc = { path = "../rust-mirrors/xi-editor/rust/rpc" }
xi-trace = { path = "..//rust-mirrors/xi-editor/rust/trace" }
xi-trace-dump = { path = "../rust-mirrors/xi-editor/rust/trace-dump" }
xi-unicode = { path = "../rust-mirrors/xi-editor/rust/unicode" }
