watermelon_proto/
server_info.rs

1use alloc::{string::String, vec::Vec};
2use core::{net::IpAddr, num::NonZero};
3
4use serde::Deserialize;
5
6use crate::ServerAddr;
7
8#[derive(Debug, PartialEq, Eq, Deserialize)]
9#[allow(clippy::struct_excessive_bools)]
10pub struct ServerInfo {
11    #[serde(rename = "server_id")]
12    pub id: String,
13    #[serde(rename = "server_name")]
14    pub name: String,
15    pub version: String,
16    #[serde(rename = "go")]
17    pub go_version: String,
18    pub host: IpAddr,
19    pub port: NonZero<u16>,
20    #[serde(rename = "headers")]
21    pub supports_headers: bool,
22    pub max_payload: NonZero<u32>,
23    #[serde(rename = "proto")]
24    pub protocol_version: u32,
25    #[serde(default)]
26    pub client_id: Option<u64>,
27    #[serde(default)]
28    pub auth_required: bool,
29    #[serde(default)]
30    pub tls_required: bool,
31    #[serde(default)]
32    pub tls_verify: bool,
33    #[serde(default)]
34    pub tls_available: bool,
35    #[serde(default)]
36    pub connect_urls: Vec<ServerAddr>,
37    #[serde(default, rename = "ws_connect_urls")]
38    pub websocket_connect_urls: Vec<ServerAddr>,
39    #[serde(default, rename = "ldm")]
40    pub lame_duck_mode: bool,
41    #[serde(default)]
42    pub git_commit: Option<String>,
43    #[serde(default, rename = "jetstream")]
44    pub supports_jetstream: bool,
45    #[serde(default)]
46    pub ip: Option<IpAddr>,
47    #[serde(default)]
48    pub client_ip: Option<IpAddr>,
49    #[serde(default)]
50    pub nonce: Option<String>,
51    #[serde(default, rename = "cluster")]
52    pub cluster_name: Option<String>,
53    #[serde(default)]
54    pub domain: Option<String>,
55
56    #[serde(flatten)]
57    pub non_standard: NonStandardServerInfo,
58}
59
60#[derive(Debug, PartialEq, Eq, Deserialize, Default)]
61#[non_exhaustive]
62pub struct NonStandardServerInfo {
63    #[cfg(feature = "non-standard-zstd")]
64    #[serde(default, rename = "m4ss_zstd")]
65    pub zstd: bool,
66}