Initial commit: async Rust client for the Invoice Ninja v5 API
CI / test (push) Canceled after 0s

Covers Clients, Invoices, Quotes, Credits, Payments, Products, Expenses,
Projects, Tasks, and Vendors, each with list, list_all, get, create,
update, and delete, generated by the resource_methods! macro.

Every model carries a #[serde(flatten)] extra map so fields the API
returns but the crate does not model survive a get/update round-trip
instead of being silently dropped.

Includes a Nix dev shell (Rust via rust-overlay), a GitHub Actions CI
workflow running build/test/fmt/clippy, and round-trip tests for the
extra-preservation invariant.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-10-23 14:30:01 -04:00
co-authored by Claude Opus 5
commit ff9a859d0b
25 changed files with 2544 additions and 0 deletions
+22
View File
@@ -0,0 +1,22 @@
//! An async Rust client for the [Invoice Ninja](https://www.invoiceninja.com/) v5 API.
//!
//! ```no_run
//! use invoiceninjars::{InvoiceNinjaClient, models::ListParams};
//!
//! # async fn run() -> invoiceninjars::Result<()> {
//! let client = InvoiceNinjaClient::new(
//! "https://invoicing.co/api/v1",
//! std::env::var("IN_API_TOKEN").unwrap(),
//! )?;
//!
//! let clients = client.list_clients(&ListParams::new().per_page(50)).await?;
//! # Ok(())
//! # }
//! ```
mod client;
mod error;
pub mod models;
pub use client::InvoiceNinjaClient;
pub use error::{ApiErrorBody, Error, Result};