[package]
name = "noir"
version = "0.1.0"
authors = [
    "Edoardo Morassutto <edoardo.morassutto@gmail.com>",
    "Marco Donadoni <marco.donadoni@mail.polimi.it>"
]
edition = "2018"

[features]
default = ["flume"]
crossbeam = ["crossbeam-channel"]
profiler = []

[dependencies]
# for logging to the console
log = { version = "0.4", features = ["release_max_level_info"] }
env_logger = "0.8"

# used by the network for storing type-generic structures
typemap = "0.3"

# the shuffle() operator requires a random source
rand = "0.8"

# utility macros for customizing the derive Debug, Default, ...
derivative = "2.2"

# serialization library used for reading the config file (yaml) and serializing
# the messages on the network
serde = { version = "1.0", features = ["derive"] }
serde_yaml = "0.8"
serde_json = "1.0"
bincode = "1.3"

# handy Result type
anyhow = "1.0"

# handy iterators functions
itertools = "0.10"

# for storing non-mutable static variables with non-trivial initialization
lazy_static = "1.4"

# used for spawning the remote workers
ssh2 = { version = "0.9", features = ["vendored-openssl"] }
whoami = "1.1"
shell-escape = "0.1"

# command line parsing utility
structopt = "0.3"

# channel implementation
crossbeam-channel = { version = "0.5", optional = true }
flume = { version = "0.10", optional = true }

# Used for KeyedWindowManager
hashbrown = "0.11"

# used for csv file source
csv = "1.1"

# Lazy with support for delayed and synchronized initialization
lazy-init = "0.5"

# Format dates and times
chrono = "0.4"

# Faster monotonic clock using libc's CLOCK_MONOTONIC_COARSE
coarsetime = "0.1"

# faster allocator
mimalloc = { version = "*", optional = true }

[dev-dependencies]
# for the tests
tempfile = "3.2"
criterion = { version = "0.3", features = ["html_reports"] }
fake = "2.4"

# for the examples
regex = "1.4.3"

# used in the benchmarks
crossbeam-channel = "0.5"
flume = "0.10"


# The list of benchmarks, all of them require "harness = false" in order to
# work with criterion.rs. Cannot set `[lib] harness = false` because the tests
# require the harness.
[[bench]]
name = "wordcount"
harness = false
[[bench]]
name = "shuffle"
harness = false
[[bench]]
name = "fold_vs_reduce"
harness = false
[[bench]]
name = "batch_mode"
harness = false
[[bench]]
name = "recv_vs_select"
harness = false
[[bench]]
name = "coarse_time"
harness = false

[profile.release]
debug = true