s0_udp 0.1.0

sync0 基于 compio 的高速 UDP 传输、线协议、自适应 Zstd 与 Dragonfly P2P 引擎
use std::{fmt, result};

use thiserror::Error;

/// 压缩帧头错误编码(1 字节数值枚举,替代字符串胖指针)
#[derive(Clone, Copy, Debug, PartialEq, Eq)]
#[repr(u8)]
pub enum FrameError {
  /// 块前缀不足 4 字节
  ShortPrefix = 1,
  /// `clen` 超过载荷剩余长度
  LenOverflow = 2,
}

impl fmt::Display for FrameError {
  fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
    f.write_str(match self {
      Self::ShortPrefix => "块前缀不足",
      Self::LenOverflow => "clen 超过载荷",
    })
  }
}

#[derive(Error, Debug)]
pub enum Error {
  #[error(transparent)]
  Encode(#[from] mzstd::EncodeError),

  #[error(transparent)]
  Decode(#[from] mzstd::DecodeError),

  #[error(transparent)]
  Config(#[from] mzstd::ConfigError),

  #[error("帧格式非法: {0}")]
  Frame(FrameError),

  #[error("输出缓冲不足")]
  Overflow,
}

pub type Result<T> = result::Result<T, Error>;