summaryrefslogtreecommitdiff
path: root/src/serialise/serialise/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'src/serialise/serialise/mod.rs')
-rw-r--r--src/serialise/serialise/mod.rs135
1 files changed, 0 insertions, 135 deletions
diff --git a/src/serialise/serialise/mod.rs b/src/serialise/serialise/mod.rs
deleted file mode 100644
index 8ee610c..0000000
--- a/src/serialise/serialise/mod.rs
+++ /dev/null
@@ -1,135 +0,0 @@
-// Copyright 2024 Gabriel Bjørnager Jensen.
-//
-// This file is part of bzipper.
-//
-// bzipper is free software: you can redistribute
-// it and/or modify it under the terms of the GNU
-// Lesser General Public License as published by
-// the Free Software Foundation, either version 3
-// of the License, or (at your option) any later
-// version.
-//
-// bzipper is distributed in the hope that it will
-// be useful, but WITHOUT ANY WARRANTY; without
-// even the implied warranty of MERCHANTABILITY or
-// FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-// Lesser General Public License for more details.
-//
-// You should have received a copy of the GNU Less-
-// er General Public License along with bzipper. If
-// not, see <https://www.gnu.org/licenses/>.
-
-use crate::serialise::SStream;
-
-use std::convert::Infallible;
-use std::mem::size_of;
-use std::num::NonZero;
-
-/// Denotes a type capable of being serialised.
-pub trait Serialise: Sized {
- /// Serialises `self` into a byte stream.
- ///
- /// One may assume that the resulting stream has at most the same ammount of bytes as before serialisation.
- /// Therefore, not observing this rule is a logic error.
- fn serialise(&self, stream: &mut SStream);
-}
-
-macro_rules! impl_float {
- ($type:ty) => {
- impl Serialise for $type {
- fn serialise(&self, stream: &mut SStream) {
- stream.append(&self.to_be_bytes())
- }
- }
- };
-}
-
-macro_rules! impl_int {
- ($type:ty) => {
- impl Serialise for $type {
- fn serialise(&self, stream: &mut SStream) {
- stream.append(&self.to_be_bytes())
- }
- }
-
- impl Serialise for NonZero<$type> {
- fn serialise(&self, stream: &mut SStream) {
- self.get().serialise(stream)
- }
- }
- };
-}
-
-impl<T: Serialise, const N: usize> Serialise for [T; N] {
- fn serialise(&self, stream: &mut SStream) {
- u64::try_from(self.len()).unwrap().serialise(stream);
-
- for v in self { v.serialise(stream) }
- }
-}
-
-impl Serialise for () {
- fn serialise(&self, _stream: &mut SStream) { }
-}
-
-impl Serialise for bool {
- fn serialise(&self, stream: &mut SStream) {
- u8::from(*self).serialise(stream)
- }
-}
-
-impl Serialise for char {
- fn serialise(&self, stream: &mut SStream) {
- u32::from(*self).serialise(stream)
- }
-}
-
-impl Serialise for Infallible {
- fn serialise(&self, _stream: &mut SStream) { unreachable!() }
-}
-
-impl<T: Serialise> Serialise for Option<T> {
- fn serialise(&self, stream: &mut SStream) {
- match *self {
- None => {
- stream.append(&[0x00]);
- stream.append(&vec![0x00; size_of::<T>()]);
- },
-
- Some(ref v) => {
- stream.append(&[0x01]);
- v.serialise(stream);
- },
- };
- }
-}
-
-impl<T: Serialise, E: Serialise> Serialise for Result<T, E> {
- fn serialise(&self, stream: &mut SStream) {
- match *self {
- Ok(ref v) => {
- stream.append(&[0x00]);
- v.serialise(stream);
- },
-
- Err(ref e) => {
- stream.append(&[0x01]);
- e.serialise(stream);
- },
- };
- }
-}
-
-impl_float!(f32);
-impl_float!(f64);
-
-impl_int!(i128);
-impl_int!(i16);
-impl_int!(i32);
-impl_int!(i64);
-impl_int!(i8);
-impl_int!(u128);
-impl_int!(u16);
-impl_int!(u32);
-impl_int!(u64);
-impl_int!(u8);