[package]
edition = "2024"
rust-version = "1.88.0"
name = "bytehound-opc-da-client"
version = "0.2.8"
authors = ["Wendell Saligan <saliganw@gmail.com>"]
build = false
exclude = [
".winmd/",
"architecture.md",
"spec.md",
"rewrite.py",
]
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Backend-agnostic OPC DA client library for Rust — async, trait-based, with transparent COM management"
homepage = "https://github.com/bytehound-labs/opc-cli"
readme = "README.md"
keywords = [
"opc",
"opc-da",
"windows",
"automation",
"scada",
]
categories = [
"api-bindings",
"network-programming",
]
license = "MIT"
repository = "https://github.com/bytehound-labs/opc-cli"
resolver = "2"
[package.metadata.docs.rs]
default-target = "x86_64-pc-windows-msvc"
targets = ["x86_64-pc-windows-msvc"]
all-features = true
[features]
default = ["opc-da-backend"]
dev-diagnostics = []
opc-da-backend = []
test-support = ["dep:mockall"]
[lib]
name = "opc_da_client"
path = "src/lib.rs"
[dependencies.anyhow]
version = "1.0.95"
[dependencies.async-trait]
version = "0.1.86"
[dependencies.chrono]
version = "0.4.43"
[dependencies.mockall]
version = "0.13.1"
optional = true
[dependencies.thiserror]
version = "2.0"
[dependencies.tokio]
version = "1.43.0"
features = [
"rt",
"rt-multi-thread",
"sync",
"macros",
]
[dependencies.tracing]
version = "0.1.41"
[dependencies.uuid]
version = "1.18.1"
features = ["v4"]
[dependencies.windows]
version = "0.61.3"
features = [
"Win32_Foundation",
"Win32_Graphics_Gdi",
"Win32_Security",
"Win32_System_Com",
"Win32_System_Com_StructuredStorage",
"Win32_System_Ole",
"Win32_System_Variant",
"Win32_System_WinRT",
]
[dependencies.windows-core]
version = "0.61.2"
[lints.clippy]
doc_markdown = "allow"
if_not_else = "allow"
items_after_statements = "allow"
missing_const_for_fn = "allow"
missing_errors_doc = "allow"
module_name_repetitions = "allow"
multiple_crate_versions = "allow"
must_use_candidate = "allow"
option_if_let_else = "allow"
redundant_feature_names = "allow"
single_match_else = "allow"
undocumented_unsafe_blocks = "deny"
uninlined_format_args = "allow"
[lints.clippy.all]
level = "deny"
priority = -1
[lints.clippy.cargo]
level = "warn"
priority = -1
[lints.clippy.nursery]
level = "warn"
priority = -1
[lints.clippy.pedantic]
level = "warn"
priority = -2
[lints.rust]
unreachable_pub = "allow"
unsafe_code = "allow"
unused_imports = "warn"