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    pub level: usize,
62    /// Number of API calls currently in-flight.
63    #[serde(default)]
64    pub inflight: u64,
65}
66
67#[derive(Debug, Default, Deserialize, Clone, Copy, PartialEq, Eq)]
68pub struct Tier {
69    /// Memory Storage being used for Stream Message storage
70    pub memory: u64,
71    /// File Storage being used for Stream Message storage
72    pub storage: u64,
73    // Number of bytes reserved for memory usage by
74    // this account on the server
75    pub reserved_memory: u64,
76    // Number of bytes reserved for disk usage by this
77    // account on the server
78    pub reserved_storage: u64,
79    /// Number of active Streams
80    pub streams: usize,
81    /// Number of active Consumers
82    pub consumers: usize,
83    /// Limits imposed on this tier.
84    pub limits: Limits,
85    /// Number of requests received.
86    #[serde(rename = "api")]
87    pub requests: Requests,
88}
89
90#[derive(Debug, Default, Deserialize, Clone, PartialEq, Eq)]
91pub struct Account {
92    /// Memory storage being used for Stream Message storage
93    pub memory: u64,
94    /// File Storage being used for Stream Message storage
95    pub storage: u64,
96    // Number of bytes reserved for memory usage by
97    // this account on the server
98    pub reserved_memory: u64,
99    // Number of bytes reserved for disk usage by this
100    // account on the server
101    pub reserved_storage: u64,
102    /// Number of active Streams
103    pub streams: usize,
104    /// Number of active Consumers
105    pub consumers: usize,
106    /// The JetStream domain this account is in
107    pub domain: Option<String>,
108    /// Limits imposed on this account.
109    pub limits: Limits,
110    /// Number of requests received.
111    #[serde(rename = "api")]
112    pub requests: Requests,
113    /// Tiers associated with this account.
114    #[serde(default)]
115    pub tiers: HashMap<String, Tier>,
116}