use super::bindings::{
kvm_irq_routing, kvm_irq_routing_entry, kvm_irq_routing_entry__bindgen_ty_1,
kvm_irq_routing_msi__bindgen_ty_1, kvm_mp_state, kvm_one_reg, kvm_regs, kvm_vcpu_init,
user_fpsimd_state, user_pt_regs,
};
use serde::{Deserialize, Deserializer, Serialize, Serializer};
use zerocopy::{IntoBytes, transmute};
serde_impls! {
user_pt_regs,
user_fpsimd_state,
kvm_regs,
kvm_vcpu_init,
kvm_mp_state,
kvm_one_reg,
kvm_irq_routing,
kvm_irq_routing_entry
}
unsafe impl IntoBytes for kvm_irq_routing_msi__bindgen_ty_1 {
fn only_derive_is_allowed_to_implement_this_trait()
where
Self: Sized,
{
}
}
unsafe impl IntoBytes for kvm_irq_routing_entry__bindgen_ty_1 {
fn only_derive_is_allowed_to_implement_this_trait()
where
Self: Sized,
{
}
}
#[cfg(test)]
mod tests {
use super::*;
use serde::{Deserialize, Serialize};
fn is_serde<T: Serialize + for<'de> Deserialize<'de> + Default>() {
let config = bincode::config::standard();
let serialized = bincode::serde::encode_to_vec(T::default(), config).unwrap();
let (deserialized, _): (T, _) =
bincode::serde::decode_from_slice(&serialized, config).unwrap();
let serialized_again = bincode::serde::encode_to_vec(&deserialized, config).unwrap();
assert_eq!(serialized, serialized_again);
}
#[test]
fn static_assert_serde_implementations() {
is_serde::<user_pt_regs>();
is_serde::<user_fpsimd_state>();
is_serde::<kvm_regs>();
is_serde::<kvm_vcpu_init>();
is_serde::<kvm_mp_state>();
is_serde::<kvm_one_reg>();
is_serde::<kvm_irq_routing>();
is_serde::<kvm_irq_routing_entry>();
}
fn is_serde_json<T: Serialize + for<'de> Deserialize<'de> + Default>() {
let serialized = serde_json::to_string(&T::default()).unwrap();
let deserialized = serde_json::from_str::<T>(serialized.as_ref()).unwrap();
let serialized_again = serde_json::to_string(&deserialized).unwrap();
assert_eq!(serialized, serialized_again);
}
#[test]
fn test_json_serde() {
is_serde_json::<user_pt_regs>();
is_serde_json::<user_fpsimd_state>();
is_serde_json::<kvm_regs>();
is_serde_json::<kvm_vcpu_init>();
is_serde_json::<kvm_mp_state>();
is_serde_json::<kvm_one_reg>();
is_serde_json::<kvm_irq_routing>();
is_serde_json::<kvm_irq_routing_entry>();
}
}