jax_daemon/http_server/health/
version.rs1use 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#[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 #[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}