Skip to main content

gov_uk_rs_sdk/
lib.rs

1//! **GOV.UK / Companies House** Rust SDK — umbrella crate with a small [`harness`] layer and workspace crates under `crates/`.
2//!
3//! # Harness
4//!
5//! - [`harness::ApiResponse`] — success envelope (body + `Content-Type` / `CH-Expiry-Date` metadata).
6//! - [`harness::ApiError`] / [`harness::ApiResult`] — alias of core [`SdkError`](gov_uk_sdk_core::SdkError).
7//! - [`harness::ApiRequest`] — wrapper around [`SdkRequest`](gov_uk_sdk_core::SdkRequest) with [`harness::ApiRequest::send_json_api`].
8//!
9//! # Examples
10//!
11//! See `examples/` (`company_profile`, `search_companies`). Run with a key in the environment:
12//!
13//! `cargo run -p gov-uk-rs-sdk --example company_profile`
14//!
15//! For local runs, copy **`.env.example`** to **`.env`** and set `COMPANIES_HOUSE_API_KEY` (see [README](https://github.com/xylex-group/gov-uk-rs-sdk#configuration-env)).
16
17pub mod harness;
18
19pub use gov_uk_sdk_core::*;
20
21#[cfg(feature = "ch-public-data")]
22pub use gov_uk_ch_public_data as ch_public_data;
23
24#[cfg(feature = "ch-document")]
25pub use gov_uk_ch_document as ch_document;
26
27/// Commonly used symbols: core, harness, and enabled product crates.
28pub mod prelude {
29    pub use crate::harness::{into_api_result, ApiError, ApiRequest, ApiResponse, ApiResult, NegotiatedMeta};
30
31    pub use gov_uk_sdk_core::{
32        Auth, ChDeprecation, Method, NegotiatedResponse, SdkClient, SdkClientBuilder, SdkError, SdkResult,
33        SdkRequest, Validation, vendor_content_type, COMPANIES_HOUSE_API_ROOT,
34    };
35
36    #[cfg(feature = "ch-public-data")]
37    pub use gov_uk_ch_public_data::{
38        get_company_profile, search_companies, CompanyProfile, CompanySearchHit, SearchCompaniesQuery,
39        SearchCompaniesResponse, COMPANY_PROFILE_ACCEPT_LATEST, COMPANY_PROFILE_VENDOR_MIME,
40    };
41
42    #[cfg(feature = "ch-document")]
43    pub use gov_uk_ch_document::{DocumentApiStub, DOCUMENT_API_PATH_PREFIX};
44}
45
46#[cfg(test)]
47mod tests {
48    use super::harness::{ApiResponse, NegotiatedMeta};
49    use gov_uk_sdk_core::NegotiatedResponse;
50
51    /// Ensures [`ApiResponse::body`] and [`NegotiatedMeta`] match the wrapped negotiated response.
52    #[test]
53    fn api_response_exposes_meta() {
54        let n: NegotiatedResponse<i32> = NegotiatedResponse {
55            body: 42_i32,
56            content_type: Some("application/json".into()),
57            deprecation: None,
58        };
59        let api = ApiResponse::new(n);
60        assert_eq!(*api.body(), 42);
61        assert_eq!(
62            api.meta(),
63            NegotiatedMeta {
64                content_type: Some("application/json".into()),
65                deprecation: None,
66            }
67        );
68    }
69}