use alloc::vec::Vec;
use core::num::NonZeroI64;
use serde::{Deserialize, Deserializer, Serializer};
pub fn serialize<S: Serializer>(values: &[NonZeroI64], serializer: S) -> Result<S::Ok, S::Error> {
let words: &[i64] = bytemuck::must_cast_slice(values);
crate::packed::serialize_words(words, serializer)
}
pub fn deserialize<'de, D: Deserializer<'de>>(
deserializer: D,
) -> Result<Vec<NonZeroI64>, D::Error> {
crate::Packed::<i64>::deserialize(deserializer)?
.into_vec()
.into_iter()
.map(NonZeroI64::new)
.collect::<Option<Vec<_>>>()
.ok_or_else(|| serde::de::Error::custom("zero in nonzero list"))
}