1pub mod parse;
20
21use std::collections::HashMap;
22
23use serde::{Deserialize, Serialize};
24
25#[derive(Deserialize, Serialize, Debug, Clone)]
26pub struct VBucketServerMap {
27 #[serde(alias = "hashAlgorithm")]
28 pub hash_algorithm: String,
29 #[serde(alias = "numReplicas")]
30 pub num_replicas: usize,
31 #[serde(alias = "serverList")]
32 pub server_list: Vec<String>,
33 #[serde(alias = "vBucketMap")]
34 pub vbucket_map: Vec<Vec<i16>>,
35}
36
37#[derive(Deserialize, Serialize, Debug, Clone)]
38pub struct ConfigDDocs {
39 #[serde(alias = "uri")]
40 pub uri: String,
41}
42
43#[derive(Deserialize, Serialize, Debug, Default, Clone)]
44pub struct TerseExtNodePorts {
45 #[serde(alias = "kv")]
46 pub kv: Option<u16>,
47 #[serde(alias = "capi")]
48 pub capi: Option<u16>,
49 #[serde(alias = "mgmt")]
50 pub mgmt: Option<u16>,
51 #[serde(alias = "n1ql")]
52 pub n1ql: Option<u16>,
53 #[serde(alias = "fts")]
54 pub fts: Option<u16>,
55 #[serde(alias = "cbas")]
56 pub cbas: Option<u16>,
57 #[serde(alias = "eventingAdminPort")]
58 pub eventing: Option<u16>,
59 #[serde(alias = "indexHttp")]
60 pub gsi: Option<u16>,
61 #[serde(alias = "backupAPI")]
62 pub backup: Option<u16>,
63
64 #[serde(alias = "kvSSL")]
65 pub kv_ssl: Option<u16>,
66 #[serde(alias = "capiSSL")]
67 pub capi_ssl: Option<u16>,
68 #[serde(alias = "mgmtSSL")]
69 pub mgmt_ssl: Option<u16>,
70 #[serde(alias = "n1qlSSL")]
71 pub n1ql_ssl: Option<u16>,
72 #[serde(alias = "ftsSSL")]
73 pub fts_ssl: Option<u16>,
74 #[serde(alias = "cbasSSL")]
75 pub cbas_ssl: Option<u16>,
76 #[serde(alias = "eventingSSL")]
77 pub eventing_ssl: Option<u16>,
78 #[serde(alias = "indexHttps")]
79 pub gsi_ssl: Option<u16>,
80 #[serde(alias = "backupAPIHTTPS")]
81 pub backup_ssl: Option<u16>,
82}
83
84#[derive(Deserialize, Serialize, Debug, Clone)]
85pub struct TerseExtNodeAltAddresses {
86 #[serde(alias = "ports")]
87 pub ports: TerseExtNodePorts,
88 #[serde(alias = "hostname")]
89 pub hostname: Option<String>,
90}
91
92#[derive(Deserialize, Serialize, Debug, Clone)]
93pub struct TerseNodePorts {
94 #[serde(alias = "direct")]
95 pub direct: Option<u16>,
96 #[serde(alias = "proxy")]
97 pub proxy: Option<u16>,
98}
99
100#[derive(Deserialize, Serialize, Debug, Clone)]
101pub struct TerseNodeConfig {
102 #[serde(alias = "couchbaseApiBase")]
103 pub couchbase_api_base: Option<String>,
104 #[serde(alias = "hostname")]
105 pub hostname: Option<String>,
106 #[serde(alias = "ports")]
107 pub ports: Option<TerseNodePorts>,
108}
109
110#[derive(Deserialize, Serialize, Debug, Clone)]
111pub struct TerseNodeExtConfig {
112 #[serde(alias = "services")]
113 pub services: Option<TerseExtNodePorts>,
114 #[serde(alias = "thisNode")]
115 pub this_node: Option<bool>,
116 #[serde(alias = "hostname")]
117 pub hostname: Option<String>,
118 #[serde(alias = "alternateAddresses", default)]
119 pub alternate_addresses: HashMap<String, TerseExtNodeAltAddresses>,
120}
121
122#[derive(Deserialize, Serialize, Debug, Clone)]
123pub struct TerseConfig {
124 #[serde(alias = "rev")]
125 pub rev: i64,
126 #[serde(alias = "revEpoch")]
127 pub rev_epoch: Option<i64>,
128 #[serde(alias = "name")]
129 pub name: Option<String>,
130 #[serde(alias = "nodeLocator")]
131 pub node_locator: Option<String>,
132 #[serde(alias = "uuid")]
133 pub uuid: Option<String>,
134 #[serde(alias = "uri")]
135 pub uri: Option<String>,
136 #[serde(alias = "streamingUri")]
137 pub streaming_uri: Option<String>,
138 #[serde(alias = "bucketCapabilitiesVer")]
139 pub bucket_capabilities_ver: Option<String>,
140 #[serde(alias = "bucketCapabilities")]
141 pub bucket_capabilities: Option<Vec<String>>,
142 #[serde(alias = "collectionsManifestUid")]
143 pub collections_manifest_uuid: Option<String>,
144 #[serde(alias = "ddocs")]
145 pub ddocs: Option<ConfigDDocs>,
146 #[serde(alias = "vBucketServerMap")]
147 pub vbucket_server_map: Option<VBucketServerMap>,
148 #[serde(alias = "nodes")]
149 pub nodes: Option<Vec<TerseNodeConfig>>,
150 #[serde(alias = "nodesExt")]
151 pub nodes_ext: Vec<TerseNodeExtConfig>,
152 #[serde(alias = "clusterCapabilitiesVer")]
153 pub cluster_capabilities_ver: Vec<i64>,
154 #[serde(alias = "clusterCapabilities")]
155 pub cluster_capabilities: HashMap<String, Vec<String>>,
156 #[serde(alias = "clusterUUID")]
157 pub cluster_uuid: Option<String>,
158 #[serde(alias = "clusterName")]
159 pub cluster_name: Option<String>,
160}
161
162#[derive(Deserialize, Serialize, Debug, Clone)]
163#[non_exhaustive]
164pub struct CollectionManifestCollection {
165 #[serde(rename = "uid")]
166 pub uid: String,
167 #[serde(rename = "name")]
168 pub name: String,
169 #[serde(rename = "maxTTL", default)]
170 pub max_ttl: Option<i32>,
171 #[serde(rename = "history", default)]
172 pub history: Option<bool>,
173}
174
175#[derive(Deserialize, Serialize, Debug, Clone)]
176#[non_exhaustive]
177pub struct CollectionManifestScope {
178 #[serde(rename = "uid")]
179 pub uid: String,
180 #[serde(rename = "name")]
181 pub name: String,
182 #[serde(rename = "collections", default)]
183 pub collections: Vec<CollectionManifestCollection>,
184}
185
186#[derive(Deserialize, Serialize, Debug, Clone)]
187#[non_exhaustive]
188pub struct CollectionManifest {
189 #[serde(rename = "uid")]
190 pub uid: String,
191 #[serde(rename = "scopes", default)]
192 pub scopes: Vec<CollectionManifestScope>,
193}
194
195#[derive(Debug, Deserialize, Serialize)]
196pub struct FullNode {
197 #[serde(rename = "clusterMembership", default)]
198 pub cluster_membership: Option<String>,
199 #[serde(rename = "recoveryType", default)]
200 pub recovery_type: Option<String>,
201 #[serde(default)]
202 pub status: Option<String>,
203 #[serde(rename = "otpNode", default)]
204 pub otp_node: Option<String>,
205 #[serde(default)]
206 pub hostname: Option<String>,
207 #[serde(rename = "nodeUUID", default)]
208 pub node_uuid: Option<String>,
209 #[serde(rename = "clusterCompatibility", default)]
210 pub cluster_compatibility: Option<u64>,
211 #[serde(default)]
212 pub version: Option<String>,
213 #[serde(default)]
214 pub os: Option<String>,
215 #[serde(rename = "cpuCount", default)]
216 pub cpu_count: Option<u32>,
217 #[serde(default)]
218 pub ports: Option<HashMap<String, i32>>,
219 #[serde(default)]
220 pub services: Vec<String>,
221 #[serde(rename = "nodeEncryption", default)]
222 pub node_encryption: Option<bool>,
223 #[serde(rename = "nodeEncryptionClientCertVerification", default)]
224 pub node_encryption_client_cert_verification: Option<bool>,
225 #[serde(rename = "addressFamilyOnly", default)]
226 pub address_family_only: Option<bool>,
227 #[serde(rename = "configuredHostname", default)]
228 pub configured_hostname: Option<String>,
229 #[serde(rename = "addressFamily", default)]
230 pub address_family: Option<String>,
231 #[serde(rename = "externalListeners", default)]
232 pub external_listeners: Option<Vec<ExternalListener>>,
233 #[serde(rename = "serverGroup", default)]
234 pub server_group: Option<String>,
235 #[serde(rename = "couchApiBase", default)]
236 pub couch_api_base: Option<String>,
237 #[serde(rename = "couchApiBaseHTTPS", default)]
238 pub couch_api_base_https: Option<String>,
239 #[serde(rename = "nodeHash", default)]
240 pub node_hash: Option<u64>,
241 #[serde(rename = "systemStats", default)]
242 pub system_stats: Option<SystemStats>,
243 #[serde(rename = "interestingStats", default)]
244 pub interesting_stats: Option<InterestingStats>,
245 #[serde(default)]
246 pub uptime: Option<String>,
247 #[serde(rename = "memoryTotal", default)]
248 pub memory_total: Option<u64>,
249 #[serde(rename = "memoryFree", default)]
250 pub memory_free: Option<u64>,
251 #[serde(rename = "mcdMemoryReserved", default)]
252 pub mcd_memory_reserved: Option<u64>,
253 #[serde(rename = "mcdMemoryAllocated", default)]
254 pub mcd_memory_allocated: Option<u64>,
255}
256
257#[derive(Debug, Deserialize, Serialize)]
258pub struct ExternalListener {
259 #[serde(rename = "afamily", default)]
260 pub afamily: Option<String>,
261 #[serde(rename = "nodeEncryption", default)]
262 pub node_encryption: Option<bool>,
263}
264
265#[derive(Debug, Deserialize, Serialize)]
266pub struct SystemStats {
267 #[serde(rename = "cpu_utilization_rate", default)]
268 pub cpu_utilization_rate: Option<f64>,
269 #[serde(rename = "cpu_stolen_rate", default)]
270 pub cpu_stolen_rate: Option<f64>,
271 #[serde(rename = "swap_total", default)]
272 pub swap_total: Option<u64>,
273 #[serde(rename = "swap_used", default)]
274 pub swap_used: Option<u64>,
275 #[serde(rename = "mem_total", default)]
276 pub mem_total: Option<u64>,
277 #[serde(rename = "mem_free", default)]
278 pub mem_free: Option<u64>,
279 #[serde(rename = "mem_limit", default)]
280 pub mem_limit: Option<u64>,
281 #[serde(rename = "cpu_cores_available", default)]
282 pub cpu_cores_available: Option<u32>,
283 #[serde(default)]
284 pub allocstall: Option<u64>,
285}
286
287#[derive(Debug, Deserialize, Serialize)]
288pub struct InterestingStats {
289 #[serde(default)]
290 pub cmd_get: Option<u64>,
291 #[serde(default)]
292 pub couch_docs_actual_disk_size: Option<u64>,
293 #[serde(default)]
294 pub couch_docs_data_size: Option<u64>,
295 #[serde(default)]
296 pub couch_spatial_data_size: Option<u64>,
297 #[serde(default)]
298 pub couch_spatial_disk_size: Option<u64>,
299 #[serde(default)]
300 pub couch_views_actual_disk_size: Option<u64>,
301 #[serde(default)]
302 pub couch_views_data_size: Option<u64>,
303 #[serde(default)]
304 pub curr_items: Option<u64>,
305 #[serde(default)]
306 pub curr_items_tot: Option<u64>,
307 #[serde(default)]
308 pub ep_bg_fetched: Option<u64>,
309 #[serde(default)]
310 pub get_hits: Option<u64>,
311 #[serde(default)]
312 pub index_data_size: Option<u64>,
313 #[serde(default)]
314 pub index_disk_size: Option<u64>,
315 #[serde(default)]
316 pub mem_used: Option<u64>,
317 #[serde(default)]
318 pub ops: Option<u64>,
319 #[serde(default)]
320 pub vb_active_num_non_resident: Option<u64>,
321 #[serde(default)]
322 pub vb_replica_curr_items: Option<u64>,
323}
324
325#[derive(Debug, Deserialize, Serialize, Default)]
326pub struct FullBucketControllers {
327 #[serde(rename = "compactAll", default)]
328 pub compact_all: Option<String>,
329 #[serde(rename = "compactDB", default)]
330 pub compact_db: Option<String>,
331 #[serde(rename = "purgeDeletes", default)]
332 pub purge_deletes: Option<String>,
333 #[serde(rename = "startRecovery", default)]
334 pub start_recovery: Option<String>,
335 #[serde(default)]
336 pub flush: Option<String>,
337}
338
339#[derive(Debug, Deserialize, Serialize, Default)]
340pub struct BucketStatsUris {
341 #[serde(default)]
342 pub uri: Option<String>,
343 #[serde(rename = "directoryURI", default)]
344 pub directory_uri: Option<String>,
345 #[serde(rename = "nodeStatsListURI", default)]
346 pub node_stats_list_uri: Option<String>,
347}
348
349#[derive(Debug, Deserialize, Serialize, Default)]
350pub struct BucketBasicStats {
351 #[serde(rename = "quotaPercentUsed", default)]
352 pub quota_percent_used: Option<f64>,
353 #[serde(rename = "opsPerSec", default)]
354 pub ops_per_sec: Option<u64>,
355 #[serde(rename = "diskFetches", default)]
356 pub disk_fetches: Option<u64>,
357 #[serde(rename = "itemCount", default)]
358 pub item_count: Option<u64>,
359 #[serde(rename = "diskUsed", default)]
360 pub disk_used: Option<u64>,
361 #[serde(rename = "dataUsed", default)]
362 pub data_used: Option<u64>,
363 #[serde(rename = "memUsed", default)]
364 pub mem_used: Option<u64>,
365 #[serde(rename = "vbActiveNumNonResident", default)]
366 pub vb_active_num_non_resident: Option<u64>,
367}
368
369#[derive(Debug, Deserialize, Serialize)]
370pub struct FullBucketConfig {
371 #[serde(default)]
372 pub name: Option<String>,
373 #[serde(rename = "nodeLocator", default)]
374 pub node_locator: Option<String>,
375 #[serde(rename = "bucketType")]
376 pub bucket_type: String,
377 #[serde(rename = "storageBackend")]
378 pub storage_backend: String,
379
380 #[serde(default)]
381 pub uuid: Option<String>,
382 #[serde(default)]
383 pub uri: Option<String>,
384 #[serde(rename = "streamingUri", default)]
385 pub streaming_uri: Option<String>,
386
387 #[serde(rename = "numVBuckets", default)]
388 pub num_vbuckets: Option<u32>,
389
390 #[serde(rename = "bucketCapabilitiesVer", default)]
391 pub bucket_capabilities_ver: Option<String>,
392 #[serde(rename = "bucketCapabilities", default)]
393 pub bucket_capabilities: Vec<String>,
394
395 #[serde(rename = "collectionsManifestUid", default)]
396 pub collections_manifest_uid: Option<String>,
397
398 #[serde(default)]
399 pub ddocs: Option<ConfigDDocs>,
400 #[serde(rename = "vBucketServerMap", default)]
401 pub vbucket_server_map: Option<VBucketServerMap>,
402
403 #[serde(default)]
404 pub nodes: Vec<FullNode>,
405
406 #[serde(rename = "localRandomKeyUri", default)]
407 pub local_random_key_uri: Option<String>,
408
409 #[serde(default)]
410 pub controllers: FullBucketControllers,
411
412 #[serde(rename = "stats", default)]
413 pub stats: Option<BucketStatsUris>,
414
415 #[serde(rename = "authType", default)]
416 pub auth_type: Option<String>,
417 #[serde(rename = "autoCompactionSettings", default)]
418 pub auto_compaction_settings: Option<bool>,
419
420 #[serde(rename = "replicaIndex")]
421 pub replica_index: bool,
422
423 pub quota: FullBucketQuota,
424
425 #[serde(default)]
426 pub rank: Option<i64>,
427 #[serde(rename = "enableCrossClusterVersioning", default)]
428 pub enable_cross_cluster_versioning: Option<bool>,
429 #[serde(rename = "versionPruningWindowHrs", default)]
430 pub version_pruning_window_hrs: Option<u32>,
431
432 #[serde(rename = "replicaNumber")]
433 pub replica_number: u32,
434 #[serde(rename = "threadsNumber", default)]
435 pub threads_number: Option<u32>,
436
437 #[serde(rename = "basicStats", default)]
438 pub basic_stats: Option<BucketBasicStats>,
439
440 #[serde(rename = "evictionPolicy")]
441 pub eviction_policy: String,
442 #[serde(rename = "durabilityMinLevel")]
443 pub minimum_durability_level: String,
444 #[serde(rename = "pitrEnabled", default)]
445 pub pitr_enabled: Option<bool>,
446 #[serde(rename = "pitrGranularity", default)]
447 pub pitr_granularity: Option<u32>,
448 #[serde(rename = "pitrMaxHistoryAge", default)]
449 pub pitr_max_history_age: Option<u32>,
450
451 #[serde(rename = "conflictResolutionType")]
452 pub conflict_resolution_type: String,
453 #[serde(rename = "maxTTL")]
454 pub max_ttl: u32,
455 #[serde(rename = "compressionMode")]
456 pub compression_mode: String,
457
458 #[serde(rename = "historyRetentionCollectionDefault", default)]
459 pub history_retention_collection_default: Option<bool>,
460 #[serde(rename = "historyRetentionBytes", default)]
461 pub history_retention_bytes: Option<u64>,
462 #[serde(rename = "historyRetentionSeconds", default)]
463 pub history_retention_seconds: Option<u32>,
464}
465
466#[derive(Debug, Deserialize, Serialize)]
467pub struct FullBucketQuota {
468 pub ram: u64,
469 #[serde(rename = "rawRAM")]
470 pub raw_ram: u64,
471}
472
473#[derive(Debug, Deserialize, Serialize)]
474pub struct BucketNames {
475 #[serde(rename = "bucketName")]
476 pub bucket_name: String,
477 pub uuid: String,
478}
479
480#[derive(Debug, Deserialize, Serialize)]
481pub struct FullClusterConfig {
482 #[serde(default)]
483 pub name: Option<String>,
484 #[serde(default)]
485 pub nodes: Vec<FullNode>,
486 #[serde(rename = "bucketNames")]
487 pub bucket_names: Vec<BucketNames>,
488}