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}