gov-uk-sdk-core 0.1.0

Shared HTTP client, auth, errors, and content negotiation for GOV.UK / Companies House SDK crates.
Documentation
use std::time::Duration;

use reqwest::StatusCode;
use thiserror::Error;

use crate::message::ApiMessage;

#[derive(Debug, Error)]
pub enum SdkError {
    #[error(transparent)]
    Http(#[from] reqwest::Error),

    #[error(transparent)]
    Json(#[from] serde_json::Error),

    #[error(transparent)]
    QueryEncode(#[from] serde_urlencoded::ser::Error),

    #[error("HTTP {status}: {messages:?}")]
    Api {
        status: StatusCode,
        messages: Vec<ApiMessage>,
    },

    /// HTTP 429. Check [`SdkError::RateLimited::retry_after`] when present (from `Retry-After`).
    #[error("rate limited (429 Too Many Requests)")]
    RateLimited {
        retry_after: Option<Duration>,
    },

    #[error("not acceptable (406): invalid Accept MIME or version")]
    NotAcceptable { body_snippet: String },

    #[error("gone (410): requested resource version expired")]
    Gone { body_snippet: String },

    #[error("unauthorized (401)")]
    Unauthorized,

    #[error("unexpected HTTP {status}: {body_snippet}")]
    UnexpectedResponse {
        status: StatusCode,
        body_snippet: String,
    },

    #[error("invalid URL: {0}")]
    InvalidUrl(#[from] url::ParseError),
}