file-engine 1.1.0

Async, cross-platform file operations engine for desktop apps and developer tools: copy, move, sync, watch, and compress files with progress reporting and cancellation.
Documentation
[package]
name = "file-engine"
version = "1.1.0"
edition = "2021"
rust-version = "1.88"
license = "MIT"
description = "Async, cross-platform file operations engine for desktop apps and developer tools: copy, move, sync, watch, and compress files with progress reporting and cancellation."
repository = "https://github.com/<author>/file-engine"
readme = "README.md"
keywords = ["filesystem", "io", "async", "tokio", "copy"]
categories = ["filesystem", "asynchronous"]

[features]
default     = ["operations", "analyze"]

# `operations` pulls in `dep:libc`/`dep:windows-sys` for the
# filesystem-capability probe (src/profiler/fs_caps.rs) and
# `dep:unicode-normalization` for path-comparison normalization
# (src/paths.rs) — both needed unconditionally by copy/move/sync, not
# gated behind their own feature the way `permissions` is, since
# filesystem-capability detection isn't optional preservation behavior,
# it's a correctness pre-flight check. See
# dev-docs/design/filesystem-detection.md.
operations  = ["dep:walkdir", "dep:libc", "dep:windows-sys", "dep:unicode-normalization"]
analyze     = ["dep:walkdir", "dep:infer"]
checksum    = ["analyze", "dep:blake3"]
watch       = ["dep:notify"]
compress    = ["operations", "dep:zip", "dep:flate2"]
permissions = ["operations"]
sync        = ["operations", "analyze"]
diagnostics = ["dep:error-engine"]

[dependencies]
tokio = { version = "1", features = ["fs", "rt", "rt-multi-thread", "macros", "sync", "io-util"] }
tokio-stream = "0.1"
tokio-util = { version = "0.7", features = ["rt"] }
thiserror = "1"

walkdir      = { version = "2",   optional = true }
infer        = { version = "0.16", optional = true }
blake3       = { version = "1",   optional = true }
notify       = { version = "6",   optional = true }
zip          = { version = "2",   optional = true }
flate2       = { version = "1",   optional = true }
error-engine = { version = "0.2", optional = true }
unicode-normalization = { version = "0.1", optional = true }

[dev-dependencies]
tokio = { version = "1", features = ["full"] }
tempfile = "3"
filetime = "0.2"

# Each example below calls its operation unconditionally — gating it
# here means Cargo just skips building it for feature sets that don't
# include what it needs, instead of failing the whole build (e.g.
# `--features watch` alone, which doesn't imply `operations`).
[[example]]
name = "basic_copy"
required-features = ["operations"]

[[example]]
name = "basic_move"
required-features = ["operations"]

[[example]]
name = "basic_sync"
required-features = ["sync"]

[[example]]
name = "basic_watch"
required-features = ["watch"]

[[example]]
name = "basic_compress"
required-features = ["compress"]

[target."cfg(unix)".dependencies]
libc = { version = "0.2", optional = true }

[target."cfg(windows)".dependencies]
windows-sys = { version = "0.61", features = ["Win32_Storage_FileSystem", "Win32_Foundation", "Win32_System_SystemServices"], optional = true }