[package]
name = "ib-shell"
version = "0.2.0"
edition = "2024"
description = "A library for Windows Shell."
keywords = ["file", "shell", "desktop-environment", "desktop", "hook"]
categories = ["gui", "os"]
repository.workspace = true
license.workspace = true

[features]
default = [
    "item",
]

## Shell items.
item = [
    "dep:ib-shell-item",
    "ib-shell-item/prop",
]
## Shell verbs.
verb = ["dep:ib-shell-verb"]

## Hooking.
hook = [
    "dep:ib-hook",
    "ib-shell-item?/hook",
    "ib-shell-verb?/hook",
]
## Hooking, the DLL part.
##
## The injector and the DLL MUST use the same crate features.
## Otherwise, deserialization may result in corrupted config or fail.
hook-dll = [
    "ib-hook/inject-dll",
    "ib-hook/inject-dll-dll",
    "ib-hook/sysinfo",
    "ib-shell-item?/hook-dll",
]
## Hooking logs.
hook-log = [
    "ib-shell-item?/hook-log",
]

## Everything integration.
everything = ["ib-shell-item?/everything"]

bin = [
    "dep:clap",
    "dep:ctrlc",
    "dep:tracing-subscriber",
]

doc = ["dep:document-features"]

[dependencies]
anyhow = "1"
bon = "3"
clap = { version = "4", optional = true, features = ["derive"] }
ctrlc = { version = "3", optional = true, features = ["termination"] }
document-features = { version = "0.2", optional = true }
ib-hook = { workspace = true, optional = true }
ib-shell-item = { workspace = true, optional = true }
ib-shell-verb = { workspace = true, optional = true }
serde.workspace = true
tracing = "0.1"
tracing-subscriber = { version = "0.3", optional = true }
widestring = "1"

[target.'cfg(target_family = "windows")'.dependencies]
windows = { version = "0.62", features = [
] }

[dev-dependencies]
ib-shell = { path = ".", features = [
    "item",
    "verb",
    "hook",
    "hook-dll",
    "hook-log",
    "everything",
] }

[[example]]
name = "hook"
crate-type = ["cdylib"]

[[bin]]
name = "inject-hook"
required-features = ["hook", "hook-dll", "bin"]

[package.metadata.docs.rs]
targets = ["x86_64-pc-windows-msvc"]
all-features = true
# To test this locally, run:
# ```
# RUSTDOCFLAGS="--cfg docsrs" cargo +nightly doc --all-features --no-deps
# $env:RUSTDOCFLAGS="--cfg docsrs"; cargo +nightly doc --all-features --no-deps
# ```
rustdoc-args = ["--cfg", "docsrs"]
