[package]
name = "ethers-solc"
authors = [
    "Matthias Seitz <matthias.seitz@outlook.de>",
    "Georgios Konstantopoulos <me@gakonst.com>",
]
readme = "README.md"
description = "Utilites for working with solc"
keywords = ["ethers", "ethereum", "web3", "solc", "solidity"]

version.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
documentation.workspace = true
repository.workspace = true
homepage.workspace = true
categories.workspace = true
exclude.workspace = true

[package.metadata.docs.rs]
all-features = true
rustc-args = ["--cfg", "docsrs"]
rustdoc-args = ["--cfg", "docsrs"]

[package.metadata.playground]
all-features = true

[dependencies]
ethers-core.workspace = true

solang-parser = { version = "=0.2.3", default-features = false }

serde = { workspace = true, features = ["derive", "rc"] }
serde_json.workspace = true

tiny-keccak = { version = "2.0.2", default-features = false }
sha2 = { workspace = true, optional = true }
md-5 = "0.10.5"

semver = { workspace = true, features = ["serde"] }
walkdir.workspace = true
once_cell.workspace = true
regex.workspace = true
thiserror.workspace = true
hex.workspace = true
yansi = "0.5.1"
glob = "0.3.1"
tracing.workspace = true
num_cpus = "1.15.0"
dunce.workspace = true
rayon.workspace = true
path-slash = "0.2.1"
cfg-if = "1.0.0"

tempfile = { version = "3.4.0", optional = true }
fs_extra = { version = "1.3.0", optional = true }
rand = { workspace = true, optional = true }
futures-util = { workspace = true, optional = true }

[target.'cfg(not(target_arch = "wasm32"))'.dependencies]
home = "0.5.4"
svm = { package = "svm-rs", version = "0.2", default-features = false, features = [
    "blocking",
], optional = true }
svm-builds = { package = "svm-rs-builds", version = "0.1", optional = true }
tokio = { workspace = true, features = ["rt"] }

[target.'cfg(target_arch = "wasm32")'.dependencies]
# NOTE: this enables wasm compatibility for getrandom indirectly
getrandom.workspace = true

[dev-dependencies]
criterion.workspace = true
env_logger = "0.10.0"
tracing-subscriber = { workspace = true, features = ["env-filter", "fmt"] }
rand.workspace = true
pretty_assertions = "1.3.0"
tempfile.workspace = true
serde_path_to_error = "0.1.10"

[[bench]]
name = "compile_many"
harness = false

[[bench]]
name = "read_all"
required-features = ["project-util"]
harness = false

[[test]]
name = "project"
path = "tests/project.rs"
required-features = ["full", "project-util"]

[[test]]
name = "mocked"
path = "tests/mocked.rs"
required-features = ["full", "project-util"]

[features]
default = ["rustls"]

full = ["async", "svm-solc"]

async = [
    "tokio/process",
    "tokio/io-util",
    "tokio/fs",
    "tokio/time",
    "futures-util",
    "criterion/async_tokio",
]
svm-solc = ["svm", "svm-builds", "sha2"]

# Utilities for creating and testing project workspaces
project-util = ["tempfile", "fs_extra", "rand"]

tests = []
openssl = ["svm?/openssl"]
rustls = ["svm?/rustls"]

# Deprecated
asm = []
