Skip to main content

jax_daemon/http_server/health/
version.rs

1use axum::response::{IntoResponse, Response};
2use axum::Json;
3use http::StatusCode;
4use reqwest::{Client, RequestBuilder, Url};
5use serde::{Deserialize, Serialize};
6
7use common::version::BuildInfo;
8
9use crate::http_server::api::client::ApiRequest;
10use crate::version::build_info;
11
12/// Request type for the version endpoint.
13#[derive(Debug, Clone, Serialize, Deserialize)]
14pub struct VersionRequest {}
15
16impl ApiRequest for VersionRequest {
17    type Response = BuildInfo;
18
19    fn build_request(self, base_url: &Url, client: &Client) -> RequestBuilder {
20        let full_url = base_url.join("/_status/version").unwrap();
21        client.get(full_url)
22    }
23}
24
25#[tracing::instrument]
26pub async fn handler() -> Response {
27    (StatusCode::OK, Json(build_info())).into_response()
28}
29
30#[cfg(test)]
31mod tests {
32    use super::*;
33
34    #[tokio::test]
35    async fn test_handler_direct() {
36        let response = handler().await;
37        assert_eq!(response.status(), StatusCode::OK);
38    }
39
40    #[test]
41    fn test_fuse_feature_detection() {
42        let info = build_info();
43        // When built with default features (which include fuse), BUILD_FEATURES should contain "fuse"
44        #[cfg(feature = "fuse")]
45        assert!(
46            info.has_feature("fuse"),
47            "Expected 'fuse' feature but got: {}",
48            info.build_features
49        );
50
51        #[cfg(not(feature = "fuse"))]
52        assert!(
53            !info.has_feature("fuse"),
54            "Did not expect 'fuse' feature but got: {}",
55            info.build_features
56        );
57    }
58}