use crate::coding::DecodeError;
use super::Version;
pub const SOLICIT: u64 = 0x40B5A;
pub fn from_setup(params: &super::Parameters, _version: Version) -> Result<Option<bool>, DecodeError> {
Ok(params
.get_varint(super::ParameterVarInt::Solicit)
.map(|value| value != 0))
}
pub fn into_setup(params: &mut super::Parameters, _version: Version) {
params.set_varint(super::ParameterVarInt::Solicit, 1);
}
#[cfg(test)]
mod tests {
use super::*;
const VERSION: Version = Version::Draft19;
#[test]
fn every_version_round_trips() {
for version in [Version::Draft14, Version::Draft15, Version::Draft16, Version::Draft19] {
let mut params = super::super::Parameters::default();
into_setup(&mut params, version);
assert_eq!(from_setup(¶ms, version).unwrap(), Some(true));
}
}
#[test]
fn absent_declares_nothing() {
let params = super::super::Parameters::default();
assert_eq!(from_setup(¶ms, VERSION).unwrap(), None);
}
#[test]
fn zero_is_a_declaration_not_an_absence() {
let mut params = super::super::Parameters::default();
params.set_varint(super::super::ParameterVarInt::Solicit, 0);
assert_eq!(from_setup(¶ms, VERSION).unwrap(), Some(false));
}
#[test]
fn any_non_zero_requires_solicitation() {
for value in [1, 2, 0x8000] {
let mut params = super::super::Parameters::default();
params.set_varint(super::super::ParameterVarInt::Solicit, value);
assert_eq!(from_setup(¶ms, VERSION).unwrap(), Some(true), "value {value}");
}
}
}