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}
61
62#[derive(Debug, Default, Deserialize, Clone, Copy, PartialEq, Eq)]
63pub struct Tier {
64    /// Memory Storage being used for Stream Message storage
65    pub memory: u64,
66    /// File Storage being used for Stream Message storage
67    pub storage: u64,
68    /// Number of active Streams
69    pub streams: usize,
70    /// Number of active Consumers
71    pub consumers: usize,
72    /// Limits imposed on this tier.
73    pub limits: Limits,
74    /// Number of requests received.
75    #[serde(rename = "api")]
76    pub requests: Requests,
77}
78
79#[derive(Debug, Default, Deserialize, Clone, PartialEq, Eq)]
80pub struct Account {
81    /// Memory storage being used for Stream Message storage
82    pub memory: u64,
83    /// File Storage being used for Stream Message storage
84    pub storage: u64,
85    /// Number of active Streams
86    pub streams: usize,
87    /// Number of active Consumers
88    pub consumers: usize,
89    /// The JetStream domain this account is in
90    pub domain: Option<String>,
91    /// Limits imposed on this account.
92    pub limits: Limits,
93    /// Number of requests received.
94    #[serde(rename = "api")]
95    pub requests: Requests,
96    /// Tiers associated with this account.
97    #[serde(default)]
98    pub tiers: HashMap<String, Tier>,
99}