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}