async_nats/jetstream/account.rs
1// Copyright 2020-2022 The NATS Authors
2// Licensed under the Apache License, Version 2.0 (the "License");
3// you may not use this file except in compliance with the License.
4// You may obtain a copy of the License at
5//
6// http://www.apache.org/licenses/LICENSE-2.0
7//
8// Unless required by applicable law or agreed to in writing, software
9// distributed under the License is distributed on an "AS IS" BASIS,
10// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
11// See the License for the specific language governing permissions and
12// limitations under the License.
13
14use serde::{de::Deserializer, Deserialize, Serialize};
15use std::collections::HashMap;
16
17fn negative_as_none<'de, D>(deserializer: D) -> Result<Option<i64>, D::Error>
18where
19 D: Deserializer<'de>,
20{
21 let n = i64::deserialize(deserializer)?;
22 if n.is_negative() {
23 Ok(None)
24 } else {
25 Ok(Some(n))
26 }
27}
28
29#[derive(Debug, Default, Deserialize, Clone, Copy, PartialEq, Eq)]
30pub struct Limits {
31 /// The maximum amount of Memory storage Stream Messages may consume
32 #[serde(deserialize_with = "negative_as_none")]
33 pub max_memory: Option<i64>,
34 /// The maximum amount of File storage Stream Messages may consume
35 #[serde(deserialize_with = "negative_as_none")]
36 pub max_storage: Option<i64>,
37 /// The maximum number of Streams an account can create
38 #[serde(deserialize_with = "negative_as_none")]
39 pub max_streams: Option<i64>,
40 /// The maximum number of Consumer an account can create
41 #[serde(deserialize_with = "negative_as_none")]
42 pub max_consumers: Option<i64>,
43 /// Indicates if Streams created in this account requires the max_bytes property set
44 pub max_bytes_required: bool,
45 /// The maximum number of outstanding ACKs any consumer may configure
46 pub max_ack_pending: i64,
47 /// The maximum size any single memory stream may be
48 #[serde(deserialize_with = "negative_as_none")]
49 pub memory_max_stream_bytes: Option<i64>,
50 /// The maximum size any single storage based stream may be
51 pub storage_max_stream_bytes: Option<i64>,
52}
53
54#[derive(Debug, Default, Serialize, Deserialize, Clone, Copy, PartialEq, Eq)]
55pub struct Requests {
56 /// Total number of requests received for this account.
57 pub total: u64,
58 /// Total number of requests that resulted in an error response.
59 pub errors: u64,
60 /// API level for this account.
61 #[cfg(feature = "server_2_11")]
62 #[serde(default)]
63 pub level: usize,
64 /// Number of API calls currently in-flight.
65 #[cfg(feature = "server_2_11")]
66 #[serde(default)]
67 pub inflight: u64,
68}
69
70#[derive(Debug, Default, Deserialize, Clone, Copy, PartialEq, Eq)]
71pub struct Tier {
72 /// Memory Storage being used for Stream Message storage
73 pub memory: u64,
74 /// File Storage being used for Stream Message storage
75 pub storage: u64,
76 // Number of bytes reserved for memory usage by
77 // this account on the server
78 pub reserved_memory: u64,
79 // Number of bytes reserved for disk usage by this
80 // account on the server
81 pub reserved_storage: u64,
82 /// Number of active Streams
83 pub streams: usize,
84 /// Number of active Consumers
85 pub consumers: usize,
86 /// Limits imposed on this tier.
87 pub limits: Limits,
88 /// Number of requests received.
89 #[serde(rename = "api")]
90 pub requests: Requests,
91}
92
93#[derive(Debug, Default, Deserialize, Clone, PartialEq, Eq)]
94pub struct Account {
95 /// Memory storage being used for Stream Message storage
96 pub memory: u64,
97 /// File Storage being used for Stream Message storage
98 pub storage: u64,
99 // Number of bytes reserved for memory usage by
100 // this account on the server
101 pub reserved_memory: u64,
102 // Number of bytes reserved for disk usage by this
103 // account on the server
104 pub reserved_storage: u64,
105 /// Number of active Streams
106 pub streams: usize,
107 /// Number of active Consumers
108 pub consumers: usize,
109 /// The JetStream domain this account is in
110 pub domain: Option<String>,
111 /// Limits imposed on this account.
112 pub limits: Limits,
113 /// Number of requests received.
114 #[serde(rename = "api")]
115 pub requests: Requests,
116 /// Tiers associated with this account.
117 #[serde(default)]
118 pub tiers: HashMap<String, Tier>,
119}