unifly-api 0.1.9

Async Rust client, reactive data layer, and domain model for UniFi controller APIs
Documentation
# THIS FILE IS AUTOMATICALLY GENERATED BY CARGO
#
# When uploading crates to the registry Cargo will automatically
# "normalize" Cargo.toml files for maximal compatibility
# with all versions of Cargo and also rewrite `path` dependencies
# to registry (e.g., crates.io) dependencies.
#
# If you are reading this file be aware that the original Cargo.toml
# will likely look very different (and much more reasonable).
# See Cargo.toml.orig for the original contents.

[package]
edition = "2024"
rust-version = "1.86"
name = "unifly-api"
version = "0.1.9"
authors = ["Stefanie Jane <stef@hyperbliss.tech>"]
build = false
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Async Rust client, reactive data layer, and domain model for UniFi controller APIs"
documentation = "https://docs.rs/unifly-api"
readme = "README.md"
keywords = [
    "unifi",
    "ubiquiti",
    "networking",
    "api-client",
    "async",
]
categories = [
    "api-bindings",
    "network-programming",
]
license = "Apache-2.0"
repository = "https://github.com/hyperb1iss/unifly"

[lib]
name = "unifly_api"
path = "src/lib.rs"

[[test]]
name = "integration_client_test"
path = "tests/integration_client_test.rs"

[[test]]
name = "legacy_client_test"
path = "tests/legacy_client_test.rs"

[dependencies.arc-swap]
version = "1"

[dependencies.async-stream]
version = "0.3"

[dependencies.bytes]
version = "1"

[dependencies.chrono]
version = "0.4"
features = [
    "serde",
    "clock",
]
default-features = false

[dependencies.dashmap]
version = "6"

[dependencies.futures-core]
version = "0.3"

[dependencies.futures-util]
version = "0.3"

[dependencies.reqwest]
version = "0.12"
features = [
    "json",
    "cookies",
    "rustls-tls",
    "gzip",
    "brotli",
]
default-features = false

[dependencies.rustls]
version = "0.23"
features = [
    "ring",
    "std",
    "tls12",
]
default-features = false

[dependencies.rustls-pki-types]
version = "1"

[dependencies.secrecy]
version = "0.10"
features = ["serde"]

[dependencies.serde]
version = "1"
features = [
    "derive",
    "rc",
]

[dependencies.serde_json]
version = "1"

[dependencies.strum]
version = "0.26"
features = ["derive"]

[dependencies.thiserror]
version = "2"

[dependencies.tokio]
version = "1"
features = [
    "sync",
    "time",
    "rt",
    "macros",
    "rt",
]

[dependencies.tokio-stream]
version = "0.1"
features = ["sync"]

[dependencies.tokio-tungstenite]
version = "0.26"
features = ["rustls-tls-webpki-roots"]

[dependencies.tokio-util]
version = "0.7"

[dependencies.tracing]
version = "0.1"

[dependencies.url]
version = "2"
features = ["serde"]

[dependencies.uuid]
version = "1"
features = [
    "serde",
    "v4",
]

[dev-dependencies.insta]
version = "1"
features = [
    "json",
    "yaml",
    "redactions",
]

[dev-dependencies.tempfile]
version = "3"

[dev-dependencies.tokio]
version = "1"
features = [
    "sync",
    "time",
    "rt",
    "test-util",
]

[dev-dependencies.tokio-test]
version = "0.4"

[dev-dependencies.wiremock]
version = "0.6"

[lints.clippy.all]
level = "deny"
priority = 0

[lints.clippy.as_conversions]
level = "warn"
priority = 22

[lints.clippy.cast_possible_truncation]
level = "warn"
priority = 22

[lints.clippy.cast_precision_loss]
level = "warn"
priority = 22

[lints.clippy.cast_sign_loss]
level = "warn"
priority = 22

[lints.clippy.cloned_instead_of_copied]
level = "warn"
priority = 36

[lints.clippy.cognitive_complexity]
level = "warn"
priority = 34

[lints.clippy.dbg_macro]
level = "warn"
priority = 31

[lints.clippy.doc_markdown]
level = "allow"
priority = 21

[lints.clippy.enum_glob_use]
level = "deny"
priority = 30

[lints.clippy.flat_map_option]
level = "warn"
priority = 36

[lints.clippy.from_iter_instead_of_collect]
level = "warn"
priority = 36

[lints.clippy.future_not_send]
level = "warn"
priority = 32

[lints.clippy.if_not_else]
level = "warn"
priority = 36

[lints.clippy.implicit_clone]
level = "warn"
priority = 33

[lints.clippy.inefficient_to_string]
level = "warn"
priority = 33

[lints.clippy.manual_let_else]
level = "warn"
priority = 36

[lints.clippy.match_same_arms]
level = "warn"
priority = 36

[lints.clippy.missing_docs_in_private_items]
level = "allow"
priority = 20

[lints.clippy.missing_errors_doc]
level = "allow"
priority = 20

[lints.clippy.missing_panics_doc]
level = "allow"
priority = 20

[lints.clippy.missing_safety_doc]
level = "allow"
priority = 20

[lints.clippy.module_name_repetitions]
level = "allow"
priority = 21

[lints.clippy.multiple_crate_versions]
level = "allow"
priority = 40

[lints.clippy.must_use_candidate]
level = "allow"
priority = 21

[lints.clippy.needless_continue]
level = "warn"
priority = 36

[lints.clippy.needless_pass_by_value]
level = "warn"
priority = 36

[lints.clippy.out_of_bounds_indexing]
level = "deny"
priority = 30

[lints.clippy.pedantic]
level = "deny"
priority = 10

[lints.clippy.perf]
level = "deny"
priority = 1

[lints.clippy.redundant_else]
level = "warn"
priority = 36

[lints.clippy.result_large_err]
level = "warn"
priority = 35

[lints.clippy.return_self_not_must_use]
level = "allow"
priority = 21

[lints.clippy.semicolon_if_nothing_returned]
level = "warn"
priority = 36

[lints.clippy.significant_drop_tightening]
level = "allow"
priority = 21

[lints.clippy.string_lit_as_bytes]
level = "warn"
priority = 33

[lints.clippy.style]
level = "warn"
priority = 1

[lints.clippy.todo]
level = "warn"
priority = 31

[lints.clippy.too_many_lines]
level = "warn"
priority = 34

[lints.clippy.trivially_copy_pass_by_ref]
level = "warn"
priority = 36

[lints.clippy.undocumented_unsafe_blocks]
level = "deny"
priority = 30

[lints.clippy.unwrap_used]
level = "deny"
priority = 30

[lints.rust]
unsafe_code = "forbid"