diff --git a/async-nats/src/jetstream/stream.rs b/async-nats/src/jetstream/stream.rs index cc900b1bc..bf9818f7b 100755 --- a/async-nats/src/jetstream/stream.rs +++ b/async-nats/src/jetstream/stream.rs @@ -1120,14 +1120,17 @@ fn default_consumer_limits_as_none<'de, D>( where D: Deserializer<'de>, { - let consumer_limits = ConsumerLimits::deserialize(deserializer)?; - if consumer_limits == ConsumerLimits::default() { - Ok(None) + let consumer_limits = Option::::deserialize(deserializer)?; + if let Some(cl) = consumer_limits { + if cl == ConsumerLimits::default() { + Ok(None) + } else { + Ok(Some(cl)) + } } else { - Ok(Some(consumer_limits)) + Ok(None) } } - #[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, Default)] pub struct ConsumerLimits { /// Sets the maximum [crate::jetstream::consumer::Config::inactive_threshold] that can be set on the consumer. @@ -2062,3 +2065,21 @@ impl From for ConsumerCreateStrictError { } } } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn consumer_limits_de() { + let config = Config { + ..Default::default() + }; + + let roundtrip: Config = { + let ser = serde_json::to_string(&config).unwrap(); + serde_json::from_str(&ser).unwrap() + }; + assert_eq!(config, roundtrip); + } +}