mirror of
https://github.com/Drop-OSS/drop.git
synced 2026-07-25 09:14:54 +10:00
fix: move model trait to lib module
This commit is contained in:
@@ -31,12 +31,8 @@ mod codec;
|
|||||||
))]
|
))]
|
||||||
pub use codec::*;
|
pub use codec::*;
|
||||||
mod header;
|
mod header;
|
||||||
pub mod model;
|
|
||||||
pub mod wrapper;
|
pub mod wrapper;
|
||||||
|
|
||||||
// Re-export
|
|
||||||
pub use model::*;
|
|
||||||
|
|
||||||
// Macro to generate a [`native_model`] implementation for a struct.
|
// Macro to generate a [`native_model`] implementation for a struct.
|
||||||
pub use native_model_macro::*;
|
pub use native_model_macro::*;
|
||||||
|
|
||||||
@@ -133,3 +129,67 @@ pub fn encode_downgrade<T: crate::Model>(model: T, version: u32) -> Result<Vec<u
|
|||||||
pub fn decode<T: crate::Model>(data: Vec<u8>) -> Result<(T, u32)> {
|
pub fn decode<T: crate::Model>(data: Vec<u8>) -> Result<(T, u32)> {
|
||||||
T::native_model_decode(data)
|
T::native_model_decode(data)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
pub trait Model: Sized {
|
||||||
|
fn native_model_id() -> u32;
|
||||||
|
fn native_model_id_str() -> &'static str;
|
||||||
|
fn native_model_version() -> u32;
|
||||||
|
fn native_model_version_str() -> &'static str;
|
||||||
|
|
||||||
|
// --------------- Decode ---------------
|
||||||
|
fn native_model_decode_body(data: Vec<u8>, id: u32) -> DecodeResult<Self>
|
||||||
|
where
|
||||||
|
Self: Sized;
|
||||||
|
|
||||||
|
fn native_model_decode_upgrade_body(data: Vec<u8>, id: u32, version: u32) -> Result<Self>
|
||||||
|
where
|
||||||
|
Self: Sized;
|
||||||
|
|
||||||
|
fn native_model_decode(data: Vec<u8>) -> Result<(Self, u32)>
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
let native_model = crate::Wrapper::deserialize(&data[..]).unwrap();
|
||||||
|
let source_id = native_model.get_id();
|
||||||
|
let source_version = native_model.get_version();
|
||||||
|
let result = Self::native_model_decode_upgrade_body(
|
||||||
|
native_model.value().to_vec(),
|
||||||
|
source_id,
|
||||||
|
source_version,
|
||||||
|
)?;
|
||||||
|
Ok((result, source_version))
|
||||||
|
}
|
||||||
|
|
||||||
|
// --------------- Encode ---------------
|
||||||
|
|
||||||
|
fn native_model_encode_body(&self) -> EncodeResult<Vec<u8>>
|
||||||
|
where
|
||||||
|
Self: Sized;
|
||||||
|
|
||||||
|
fn native_model_encode_downgrade_body(self, version: u32) -> Result<Vec<u8>>
|
||||||
|
where
|
||||||
|
Self: Sized;
|
||||||
|
|
||||||
|
fn native_model_encode(&self) -> Result<Vec<u8>>
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
let mut data = self.native_model_encode_body()?;
|
||||||
|
let data = crate::native_model_encode(
|
||||||
|
&mut data,
|
||||||
|
Self::native_model_id(),
|
||||||
|
Self::native_model_version(),
|
||||||
|
);
|
||||||
|
Ok(data)
|
||||||
|
}
|
||||||
|
|
||||||
|
fn native_model_encode_downgrade(self, version: u32) -> Result<Vec<u8>>
|
||||||
|
where
|
||||||
|
Self: Sized,
|
||||||
|
{
|
||||||
|
let version = version.clone();
|
||||||
|
let mut data = self.native_model_encode_downgrade_body(version)?;
|
||||||
|
let data = crate::native_model_encode(&mut data, Self::native_model_id(), version);
|
||||||
|
Ok(data)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|||||||
@@ -1,65 +0,0 @@
|
|||||||
use crate::{DecodeResult, EncodeResult, Result};
|
|
||||||
|
|
||||||
pub trait Model: Sized {
|
|
||||||
fn native_model_id() -> u32;
|
|
||||||
fn native_model_id_str() -> &'static str;
|
|
||||||
fn native_model_version() -> u32;
|
|
||||||
fn native_model_version_str() -> &'static str;
|
|
||||||
|
|
||||||
// --------------- Decode ---------------
|
|
||||||
fn native_model_decode_body(data: Vec<u8>, id: u32) -> DecodeResult<Self>
|
|
||||||
where
|
|
||||||
Self: Sized;
|
|
||||||
|
|
||||||
fn native_model_decode_upgrade_body(data: Vec<u8>, id: u32, version: u32) -> Result<Self>
|
|
||||||
where
|
|
||||||
Self: Sized;
|
|
||||||
|
|
||||||
fn native_model_decode(data: Vec<u8>) -> Result<(Self, u32)>
|
|
||||||
where
|
|
||||||
Self: Sized,
|
|
||||||
{
|
|
||||||
let native_model = crate::Wrapper::deserialize(&data[..]).unwrap();
|
|
||||||
let source_id = native_model.get_id();
|
|
||||||
let source_version = native_model.get_version();
|
|
||||||
let result = Self::native_model_decode_upgrade_body(
|
|
||||||
native_model.value().to_vec(),
|
|
||||||
source_id,
|
|
||||||
source_version,
|
|
||||||
)?;
|
|
||||||
Ok((result, source_version))
|
|
||||||
}
|
|
||||||
|
|
||||||
// --------------- Encode ---------------
|
|
||||||
|
|
||||||
fn native_model_encode_body(&self) -> EncodeResult<Vec<u8>>
|
|
||||||
where
|
|
||||||
Self: Sized;
|
|
||||||
|
|
||||||
fn native_model_encode_downgrade_body(self, version: u32) -> Result<Vec<u8>>
|
|
||||||
where
|
|
||||||
Self: Sized;
|
|
||||||
|
|
||||||
fn native_model_encode(&self) -> Result<Vec<u8>>
|
|
||||||
where
|
|
||||||
Self: Sized,
|
|
||||||
{
|
|
||||||
let mut data = self.native_model_encode_body()?;
|
|
||||||
let data = crate::native_model_encode(
|
|
||||||
&mut data,
|
|
||||||
Self::native_model_id(),
|
|
||||||
Self::native_model_version(),
|
|
||||||
);
|
|
||||||
Ok(data)
|
|
||||||
}
|
|
||||||
|
|
||||||
fn native_model_encode_downgrade(self, version: u32) -> Result<Vec<u8>>
|
|
||||||
where
|
|
||||||
Self: Sized,
|
|
||||||
{
|
|
||||||
let version = version.clone();
|
|
||||||
let mut data = self.native_model_encode_downgrade_body(version)?;
|
|
||||||
let data = crate::native_model_encode(&mut data, Self::native_model_id(), version);
|
|
||||||
Ok(data)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user