Skip to main content

canic_core/api/
metadata.rs

1//! Module: api::metadata
2//!
3//! Responsibility: public Canic metadata facade for endpoint callers.
4//! Does not own: package metadata generation or endpoint macro emission.
5//! Boundary: builds metadata DTOs from package and canister version inputs.
6
7use crate::dto::metadata::CanicMetadataResponse;
8
9const CANISTER_NAME: &str = env!("CARGO_PKG_NAME");
10const CANISTER_VERSION: &str = env!("CARGO_PKG_VERSION");
11const CANISTER_DESCRIPTION: &str = env!("CARGO_PKG_DESCRIPTION");
12
13///
14/// CanicMetadataApi
15///
16/// Thin endpoint-facing facade for Canic metadata responses.
17///
18
19pub struct CanicMetadataApi;
20
21impl CanicMetadataApi {
22    /// Return metadata for the core crate fallback path.
23    #[must_use]
24    pub fn metadata(canister_version: u64) -> CanicMetadataResponse {
25        Self::metadata_for(
26            CANISTER_NAME,
27            CANISTER_VERSION,
28            CANISTER_DESCRIPTION,
29            CANISTER_VERSION,
30            canister_version,
31        )
32    }
33
34    /// Return metadata for the canister crate that exports the endpoint.
35    #[must_use]
36    pub fn metadata_for(
37        package_name: &str,
38        package_version: &str,
39        package_description: &str,
40        canic_version: &str,
41        canister_version: u64,
42    ) -> CanicMetadataResponse {
43        CanicMetadataResponse {
44            package_name: package_name.to_string(),
45            package_version: package_version.to_string(),
46            package_description: package_description.to_string(),
47            canic_version: canic_version.to_string(),
48            canister_version,
49        }
50    }
51}