[package]
name = "exr"
description = "Read and write OpenEXR files without any unsafe code"
keywords = ["exr", "openexr", "file", "binary", "io"]
categories = ["encoding", "filesystem", "graphics", "multimedia"]

version = "1.74.0"
edition = "2018"
authors = ["johannesvollmer <contact@johannesvollmer.com>"]

repository = "https://github.com/johannesvollmer/exrs"
readme = "README.md"
license = "BSD-3-Clause"
exclude = [ "specification/*", "specification/**", "tests/images/*", "tests/images/**" ]
rust-version = "1.61.0"

[badges]
maintenance = { status = "actively-developed" }

[lib]
path = "src/lib.rs"
test = true
doctest = true
bench = true
doc = true
plugin = false
proc-macro = false

[dependencies]
lebe = "^0.5.2"                # generic binary serialization
half = "2.1.0"                 # 16 bit float pixel data type
bit_field = "^0.10.1"          # exr file version bit flags
miniz_oxide = "^0.8.0"         # zip compression for pxr24
smallvec = "^1.7.0"            # make cache-friendly allocations        TODO profile if smallvec is really an improvement!
rayon-core = { version = "^1.11.0", optional = true }         # threading for parallel compression
zune-inflate = { version = "^0.2.3", default-features = false, features = ["zlib"] }  # zip decompression, faster than miniz_oxide

[dev-dependencies]
image = { version = "0.25.2", default-features = false, features = ["png"] }         # used to convert one exr to some pngs

bencher = "0.1.5"
walkdir = "2.3.2"         # automatically test things for all files in a directory
rand = "0.8.5"            # used for fuzz testing
rayon = "1.5.3"           # run tests for many files in parallel

[features]
default = ["rayon"]

# rayon is used for parallel compression
rayon = ["dep:rayon-core"]

[[example]]
name = "7_write_raw_blocks"
required-features = ["rayon"]

[[example]]
name = "8_read_raw_blocks"
required-features = ["rayon"]

[[bench]]
name = "read"
harness = false
required-features = ["rayon"]

[[bench]]
name = "profiling"
harness = false
required-features = ["rayon"]

[[bench]]
name = "write"
harness = false
required-features = ["rayon"]

[[bench]]
name = "pixel_format_conversion"
harness = false
required-features = ["rayon"]

# recommended release settings for max runtime performance
[profile.release]
opt-level = 3
lto = true
debug = false
debug-assertions = false
codegen-units = 1

# test with fast runtime speed and slow build speed
[profile.dev]
incremental = true
opt-level = 3
debug-assertions = true
overflow-checks = true
debug = true
lto = true

# test with fast runtime speed and moderate build speed
[profile.test]
incremental = true
opt-level = 3
debug-assertions = true
overflow-checks = true
debug = true
lto = true

# bench with fastest runtime speed
[profile.bench]
opt-level = 3
debug-assertions = false
overflow-checks = false
lto = true
debug = true
codegen-units = 1
