| Crates.io | calleen |
| lib.rs | calleen |
| version | 0.1.3 |
| created_at | 2025-11-23 18:13:52.469236+00 |
| updated_at | 2026-01-07 17:34:44.634924+00 |
| description | Robust HTTP request library for those who don't like getting unnecessarily paged while on-call. |
| homepage | |
| repository | https://github.com/sezna/calleen |
| max_upload_size | |
| id | 1946825 |
| size | 164,084 |
I've been writing production Rust applications for quite a few years now, and in every new project I find myself replicating certain patterns. This library provides what I would consider "best practices" when sending an HTTP request, and parsing its response.
To avoid the XY problem, let me first describe the problems I wanted to solve:
serde/serde_json don't retain the raw data when they fail to deserialize. This means that you'll get error logs that say "failed to deserialize" but have no insight into what the bad input was. As an individual, it is easy to work around this. But, as a team, it slips through pretty frequently, especially with engineers new to Rust and on-call log debugging.This library addresses these three concerns primarily.
calleen retains the raw response, so if deserialization fails, the error log contains the raw input. This does have some memory overhead, but it is worth it. As somebody who has been paged at 1am for a serde deserialization failure many times in his life, I will always spend these bytes.tracing::warn!() on typically non-actionable responses like 5xx, tracing::error!() on 4xx or failure to deserialize response types, which are typically actionable and urgent. For companies I've worked in, we typically page on error!() logs, so this triggers our PagerDuty.