1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
// Copyright (c) 2017 Anatoly Ikorsky
//
// Licensed under the Apache License, Version 2.0
// <LICENSE-APACHE or http://www.apache.org/licenses/LICENSE-2.0> or the MIT
// license <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
// option. All files in the project carrying such notice may not be copied,
// modified, or distributed except according to those terms.
use std::io;
use crate::io::ParseBuf;
pub mod codec;
pub mod sync_framed;
/// Text protocol marker.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Text;
/// Binary protocol marker.
#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)]
pub struct Binary;
/// Serialization for various MySql types.
pub trait MySerialize {
/// Serializes self into the `buf`.
fn serialize(&self, buf: &mut Vec<u8>);
}
/// Deserialization for various MySql types.
pub trait MyDeserialize<'de>: Sized {
/// Size hint of a serialized value (in bytes), if it's constant.
const SIZE: Option<usize>;
/// Some structs defines deserialization in the context of another value.
///
/// Use `()` here if the deserialization procedure is defined without premises.
type Ctx;
/// Deserializes self from the given `buf`.
///
/// Imlementation must consume corresponding amount of bytes from the `buf`.
///
/// # Panic
///
/// Implementation must panic on insufficient buffer length if `Self::SIZE.is_some()`.
/// One should use `ParseBuf::checked_parse` for checked deserialization.
fn deserialize(ctx: Self::Ctx, buf: &mut ParseBuf<'de>) -> io::Result<Self>;
}