nntp_proxy/types/config/
limits.rs1use serde::{Deserialize, Serialize};
4use std::fmt;
5use std::num::{NonZeroU32, NonZeroUsize};
6
7#[doc(alias = "pool_size")]
22#[doc(alias = "connection_limit")]
23#[repr(transparent)]
24#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
25pub struct MaxConnections(NonZeroUsize);
26
27impl MaxConnections {
28 #[must_use]
30 pub const fn new(value: usize) -> Option<Self> {
31 match NonZeroUsize::new(value) {
32 Some(nz) => Some(Self(nz)),
33 None => None,
34 }
35 }
36
37 #[must_use]
39 #[inline]
40 pub const fn get(&self) -> usize {
41 self.0.get()
42 }
43
44 pub const DEFAULT: Self = Self(NonZeroUsize::new(10).unwrap());
46}
47
48impl fmt::Display for MaxConnections {
49 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
50 write!(f, "{}", self.get())
51 }
52}
53
54impl From<MaxConnections> for usize {
55 fn from(max: MaxConnections) -> Self {
56 max.get()
57 }
58}
59
60impl Serialize for MaxConnections {
61 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
62 where
63 S: serde::Serializer,
64 {
65 serializer.serialize_u64(self.get() as u64)
66 }
67}
68
69impl<'de> Deserialize<'de> for MaxConnections {
70 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
71 where
72 D: serde::Deserializer<'de>,
73 {
74 let value = usize::deserialize(deserializer)?;
75 Self::new(value).ok_or_else(|| serde::de::Error::custom("max_connections cannot be 0"))
76 }
77}
78
79#[repr(transparent)]
100#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
101pub struct MaxErrors(NonZeroU32);
102
103impl MaxErrors {
104 #[must_use]
106 pub const fn new(value: u32) -> Option<Self> {
107 match NonZeroU32::new(value) {
108 Some(nz) => Some(Self(nz)),
109 None => None,
110 }
111 }
112
113 #[must_use]
115 #[inline]
116 pub const fn get(&self) -> u32 {
117 self.0.get()
118 }
119
120 pub const DEFAULT: Self = Self(NonZeroU32::new(3).unwrap());
122}
123
124impl fmt::Display for MaxErrors {
125 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
126 write!(f, "{}", self.get())
127 }
128}
129
130impl From<MaxErrors> for u32 {
131 fn from(max: MaxErrors) -> Self {
132 max.get()
133 }
134}
135
136impl Serialize for MaxErrors {
137 fn serialize<S>(&self, serializer: S) -> Result<S::Ok, S::Error>
138 where
139 S: serde::Serializer,
140 {
141 serializer.serialize_u32(self.get())
142 }
143}
144
145impl<'de> Deserialize<'de> for MaxErrors {
146 fn deserialize<D>(deserializer: D) -> Result<Self, D::Error>
147 where
148 D: serde::Deserializer<'de>,
149 {
150 let value = u32::deserialize(deserializer)?;
151 Self::new(value).ok_or_else(|| serde::de::Error::custom("max_errors cannot be 0"))
152 }
153}