Files
invoiceninja-sdk/Cargo.toml
T
awkawbandClaude Sonnet 5 ab696a910b
CI / test (push) Canceled after 0s
CI / Build on the declared MSRV (push) Canceled after 0s
CI / Latest stable (advisory) (push) Canceled after 0s
Bump to 0.2.0 and add crates.io keywords/categories
Resolves the version/changelog mismatch flagged while checking publish
readiness: Cargo.toml had sat at 0.1.0 through everything since the initial
commit, while CHANGELOG.md's `[0.1.0] - 2026-10-23` entry called itself
"Initial release" with no git tag behind it and nothing ever actually
published (crates.io 404s on the name). Rather than relabel that entry after
the fact, it stays as the historical record it is; `[Unreleased]` becomes
`[0.2.0] - 2026-10-25` instead, with a fresh empty `[Unreleased]` left above
it for whatever comes next.

`categories` and `keywords` were empty, which is legal but leaves the crate
unreachable from crates.io's own browse and search pages. Checked both
category slugs against `/api/v1/category_slugs` rather than guessing —
`web-programming::http-client` in particular is a subcategory that doesn't
show up in the plain `/categories` listing, only in the slug list.

Re-ran `cargo publish --dry-run` after both changes: packages, verifies in
an isolated build, and reaches the upload step with no manifest warnings.
Also re-checked the full suite, clippy, fmt, the MSRV shell, and
`nix flake check` — all pass under the bumped version.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-10-25 16:29:39 -04:00

37 lines
1.6 KiB
TOML

[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"