[package] name = "invoiceninja-sdk" version = "0.2.0" edition = "2021" # Set by the dependency graph rather than by this crate's own code: reqwest # pulls in url -> idna -> idna_adapter -> icu_*, and the icu crates require # 1.88. Verified by running the test suite against it; see the `msrv` # devShell in flake.nix. rust-version = "1.88" description = "An async Rust client for the Invoice Ninja v5 API" license = "MIT" repository = "https://github.com/awkawb1/invoiceninja-sdk" # Slugs checked against https://crates.io/api/v1/category_slugs — crates.io # rejects a publish with an unrecognised one, so these aren't freeform. categories = ["api-bindings", "web-programming::http-client", "asynchronous"] keywords = ["invoiceninja", "invoicing", "billing", "async", "sdk"] [dependencies] reqwest = { version = "0.12", default-features = false, features = ["json", "native-tls", "multipart"] } serde = { version = "1", features = ["derive"] } serde_json = "1" thiserror = "2" # Already in the tree via reqwest's `url`; used to escape ids before they are # interpolated into request paths. percent-encoding = "2" # Already in the tree as reqwest's runtime; only `time` is needed, for the # sleep between retries. tokio = { version = "1", features = ["time"] } [dev-dependencies] tokio = { version = "1", features = ["rt-multi-thread", "macros"] } # Used to assert that ListParams urlencodes the way reqwest will send it. serde_urlencoded = "0.7" # Loopback HTTP server for exercising the request plumbing (pagination, path # escaping, headers, error mapping) without reaching the network. wiremock = "0.6"