pub mod cache_piece_content;
pub mod close;
pub mod download_cache_piece;
pub mod download_persistent_cache_piece;
pub mod download_persistent_piece;
pub mod download_piece;
pub mod error;
pub mod persistent_cache_piece_content;
pub mod persistent_piece_content;
pub mod piece_content;
#[repr(u8)]
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum Tag {
DownloadPiece = 0,
PieceContent = 1,
DownloadPersistentPiece = 2,
PersistentPieceContent = 3,
DownloadPersistentCachePiece = 4,
PersistentCachePieceContent = 5,
DownloadCachePiece = 6,
CachePieceContent = 7,
Reserved(u8),
Close = 254,
Error = 255,
}
impl From<u8> for Tag {
fn from(value: u8) -> Self {
match value {
0 => Tag::DownloadPiece,
1 => Tag::PieceContent,
2 => Tag::DownloadPersistentPiece,
3 => Tag::PersistentPieceContent,
4 => Tag::DownloadPersistentCachePiece,
5 => Tag::PersistentCachePieceContent,
6 => Tag::DownloadCachePiece,
7 => Tag::CachePieceContent,
8..=253 => Tag::Reserved(value),
254 => Tag::Close,
255 => Tag::Error,
}
}
}
impl From<Tag> for u8 {
fn from(tag: Tag) -> Self {
match tag {
Tag::DownloadPiece => 0,
Tag::PieceContent => 1,
Tag::DownloadPersistentPiece => 2,
Tag::PersistentPieceContent => 3,
Tag::DownloadPersistentCachePiece => 4,
Tag::PersistentCachePieceContent => 5,
Tag::DownloadCachePiece => 6,
Tag::CachePieceContent => 7,
Tag::Reserved(value) => value,
Tag::Close => 254,
Tag::Error => 255,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_try_from_u8() {
assert_eq!(Tag::from(0), Tag::DownloadPiece);
assert_eq!(Tag::from(1), Tag::PieceContent);
assert_eq!(Tag::from(2), Tag::DownloadPersistentPiece);
assert_eq!(Tag::from(3), Tag::PersistentPieceContent);
assert_eq!(Tag::from(4), Tag::DownloadPersistentCachePiece);
assert_eq!(Tag::from(5), Tag::PersistentCachePieceContent);
assert_eq!(Tag::from(6), Tag::DownloadCachePiece);
assert_eq!(Tag::from(7), Tag::CachePieceContent);
assert_eq!(Tag::from(8), Tag::Reserved(8));
assert_eq!(Tag::from(253), Tag::Reserved(253));
assert_eq!(Tag::from(254), Tag::Close);
assert_eq!(Tag::from(255), Tag::Error);
}
#[test]
fn test_from_tag() {
assert_eq!(u8::from(Tag::DownloadPiece), 0);
assert_eq!(u8::from(Tag::PieceContent), 1);
assert_eq!(u8::from(Tag::DownloadPersistentPiece), 2);
assert_eq!(u8::from(Tag::PersistentPieceContent), 3);
assert_eq!(u8::from(Tag::DownloadPersistentCachePiece), 4);
assert_eq!(u8::from(Tag::PersistentCachePieceContent), 5);
assert_eq!(u8::from(Tag::DownloadCachePiece), 6);
assert_eq!(u8::from(Tag::CachePieceContent), 7);
assert_eq!(u8::from(Tag::Reserved(8)), 8);
assert_eq!(u8::from(Tag::Reserved(253)), 253);
assert_eq!(u8::from(Tag::Close), 254);
assert_eq!(u8::from(Tag::Error), 255);
}
}