mirror of
https://github.com/cloud-hypervisor/cloud-hypervisor.git
synced 2026-08-05 02:19:16 +00:00
hypervisor: use serde_with with LapicState
Drop the hand-rolled serializer and deserializer. Signed-off-by: Wei Liu <liuwe@microsoft.com>
This commit is contained in:
@@ -252,8 +252,10 @@ pub struct FpuState {
|
||||
pub mxcsr: u32,
|
||||
}
|
||||
|
||||
#[derive(Debug, Clone)]
|
||||
#[serde_with::serde_as]
|
||||
#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)]
|
||||
pub struct LapicState {
|
||||
#[serde_as(as = "[_; 1024usize]")]
|
||||
pub(crate) regs: [::std::os::raw::c_char; 1024usize],
|
||||
}
|
||||
|
||||
@@ -264,29 +266,6 @@ impl Default for LapicState {
|
||||
}
|
||||
}
|
||||
|
||||
impl<'de> serde::Deserialize<'de> for LapicState {
|
||||
fn deserialize<D>(deserializer: D) -> std::result::Result<Self, D::Error>
|
||||
where
|
||||
D: serde::Deserializer<'de>,
|
||||
{
|
||||
let regs: Vec<::std::os::raw::c_char> = Vec::deserialize(deserializer)?;
|
||||
let mut val = LapicState::default();
|
||||
// This panics if the source and destination have different lengths.
|
||||
val.regs.copy_from_slice(®s[..]);
|
||||
Ok(val)
|
||||
}
|
||||
}
|
||||
|
||||
impl serde::Serialize for LapicState {
|
||||
fn serialize<S>(&self, serializer: S) -> std::result::Result<S::Ok, S::Error>
|
||||
where
|
||||
S: serde::Serializer,
|
||||
{
|
||||
let regs = &self.regs[..];
|
||||
regs.serialize(serializer)
|
||||
}
|
||||
}
|
||||
|
||||
impl LapicState {
|
||||
pub fn get_klapic_reg(&self, reg_offset: usize) -> u32 {
|
||||
use byteorder::{LittleEndian, ReadBytesExt};
|
||||
|
||||
Reference in New Issue
Block a user