Skip to content

Commit e9919a0

Browse files
authored
Fix serde Stream roundtrip
If someone does a serde serialize/deserialize roundtrip with jetstream::stream::Stream, it will result in error, as then `ConsumerLimits` will be `null`. This should not happen in real-world scenarios, as server does not send nulls for those values, however its good to protect against those scenarios in case Go/nats-server changes its behaviour as some point in time. Signed-off-by: Tomasz Pietrek <[email protected]>
1 parent 966df7c commit e9919a0

File tree

1 file changed

+26
-5
lines changed

1 file changed

+26
-5
lines changed

async-nats/src/jetstream/stream.rs

+26-5
Original file line numberDiff line numberDiff line change
@@ -1120,14 +1120,17 @@ fn default_consumer_limits_as_none<'de, D>(
11201120
where
11211121
D: Deserializer<'de>,
11221122
{
1123-
let consumer_limits = ConsumerLimits::deserialize(deserializer)?;
1124-
if consumer_limits == ConsumerLimits::default() {
1125-
Ok(None)
1123+
let consumer_limits = Option::<ConsumerLimits>::deserialize(deserializer)?;
1124+
if let Some(cl) = consumer_limits {
1125+
if cl == ConsumerLimits::default() {
1126+
Ok(None)
1127+
} else {
1128+
Ok(Some(cl))
1129+
}
11261130
} else {
1127-
Ok(Some(consumer_limits))
1131+
Ok(None)
11281132
}
11291133
}
1130-
11311134
#[derive(Serialize, Deserialize, Clone, Debug, PartialEq, Eq, Default)]
11321135
pub struct ConsumerLimits {
11331136
/// Sets the maximum [crate::jetstream::consumer::Config::inactive_threshold] that can be set on the consumer.
@@ -2062,3 +2065,21 @@ impl From<super::context::RequestError> for ConsumerCreateStrictError {
20622065
}
20632066
}
20642067
}
2068+
2069+
#[cfg(test)]
2070+
mod tests {
2071+
use super::*;
2072+
2073+
#[test]
2074+
fn consumer_limits_de() {
2075+
let config = Config {
2076+
..Default::default()
2077+
};
2078+
2079+
let roundtrip: Config = {
2080+
let ser = serde_json::to_string(&config).unwrap();
2081+
serde_json::from_str(&ser).unwrap()
2082+
};
2083+
assert_eq!(config, roundtrip);
2084+
}
2085+
}

0 commit comments

Comments
 (0)