xmtp_api_d14n/endpoints/d14n/
health_check.rs1use derive_builder::Builder;
2use prost::Message;
3use prost::bytes::Bytes;
4use std::borrow::Cow;
5use xmtp_proto::api::{BodyError, Endpoint};
6
7#[derive(Clone, PartialEq, ::prost::Message)]
8pub struct HealthCheckRequest {
9 #[prost(string, tag = "1")]
10 pub service: String,
11}
12
13#[derive(Clone, PartialEq, ::prost::Message)]
14pub struct HealthCheckResponse {
15 #[prost(enumeration = "ServingStatus", tag = "1")]
16 pub status: i32,
17}
18
19#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash, PartialOrd, Ord, ::prost::Enumeration)]
20#[repr(i32)]
21pub enum ServingStatus {
22 Unknown = 0,
23 Serving = 1,
24 NotServing = 2,
25 ServiceUnknown = 3,
26}
27
28#[derive(Builder, Clone, Debug, Default)]
29#[builder(setter(strip_option), build_fn(error = "BodyError"))]
30pub struct HealthCheck {
31 #[builder(setter(into), default)]
32 service: String,
33}
34
35impl HealthCheck {
36 pub fn builder() -> HealthCheckBuilder {
37 Default::default()
38 }
39}
40
41impl Endpoint for HealthCheck {
42 type Output = HealthCheckResponse;
43
44 fn grpc_endpoint(&self) -> Cow<'static, str> {
45 Cow::from("/grpc.health.v1.Health/Check")
46 }
47
48 fn body(&self) -> Result<Bytes, BodyError> {
49 Ok(HealthCheckRequest {
50 service: self.service.clone(),
51 }
52 .encode_to_vec()
53 .into())
54 }
55}
56
57#[cfg(test)]
58mod test {
59 use crate::d14n::HealthCheck;
60 use xmtp_api_grpc::test::{GatewayClient, XmtpdClient};
61 use xmtp_proto::prelude::*;
62
63 #[xmtp_common::test]
64 async fn test_health_check() {
65 let mut endpoint = HealthCheck::builder().build().unwrap();
66
67 let xmtpd_client = XmtpdClient::create();
68 let client = xmtpd_client.build().unwrap();
69 assert!(endpoint.query(&client).await.is_ok());
70
71 let gateway_client = GatewayClient::create();
72 let client = gateway_client.build().unwrap();
73 assert!(endpoint.query(&client).await.is_ok());
74 }
75}