litchee 0.1.5

Async, builder-pattern Rust client for the Lichess API: full endpoint coverage, NDJSON streaming, and OAuth2 PKCE ('Log in with Lichess').
Documentation
[package]
name = "litchee"
version = "0.1.5"
edition = "2024"
rust-version = "1.95"
authors = ["Olivier Bazin <olivierbazin.it@gmail.com>"]
description = "Async, builder-pattern Rust client for the Lichess API: full endpoint coverage, NDJSON streaming, and OAuth2 PKCE ('Log in with Lichess')."
documentation = "https://docs.rs/litchee"
homepage = "https://github.com/obazin/litchee"
repository = "https://github.com/obazin/litchee"
license = "MIT"
readme = "README.md"
keywords = ["lichess", "chess", "api", "client", "oauth"]
categories = ["api-bindings", "asynchronous", "web-programming::http-client"]
# Keep the published crate lean: ship src, license, the README + PKCE guide, and
# the runnable examples. Everything below is dev-only (specs, CI, tooling, Nix
# shell, internal notes) and is stripped from the package.
exclude = [
    "/reference",
    "/.github",
    "/.claude",
    "/.gitignore",
    "/.gitmodules",
    "/.envrc",
    "/clippy.toml",
    "/rustfmt.toml",
    "/flake.nix",
    "/flake.lock",
    "/rust-toolchain.toml",
    "/CLAUDE.md",
    "/todo.md",
]

[package.metadata.docs.rs]
all-features = true
rustdoc-args = ["--cfg", "docsrs"]

[dependencies]
async-stream = "0.3.6"
base64 = "0.22.1"
bytes = "1.11.1"
futures-core = "0.3.32"
futures-util = "0.3.32"
percent-encoding = "2.3"
rand = "0.10"
reqwest = { version = "0.13.4", default-features = false, features = ["rustls", "json", "form", "query", "stream", "http2"] }
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.150"
serde_urlencoded = "0.7.1"
sha2 = "0.11"
thiserror = "2.0.18"
# `time` only, for the retry backoff sleep; the reqwest client already requires
# a tokio runtime, so this adds no new runtime constraint.
tokio = { version = "1", default-features = false, features = ["time"] }
url = "2.5.8"

[dev-dependencies]
futures-util = "0.3.32"
tokio = { version = "1.52.3", features = ["macros", "rt-multi-thread", "net", "io-util", "time"] }
wiremock = "0.6.5"

[lints.rust]
unsafe_code = "forbid"
missing_docs = "warn"
missing_debug_implementations = "warn"
unreachable_pub = "warn"

[lints.clippy]
all = { level = "deny", priority = -1 }
pedantic = { level = "warn", priority = -1 }
# Pragmatic opt-outs for an API-binding crate with many DTOs and re-exports.
module_name_repetitions = "allow"
missing_errors_doc = "allow"
must_use_candidate = "allow"