vortex_protocol/tlv/
mod.rs1pub mod cache_piece_content;
18pub mod close;
19pub mod download_cache_piece;
20pub mod download_persistent_cache_piece;
21pub mod download_persistent_piece;
22pub mod download_piece;
23pub mod error;
24pub mod persistent_cache_piece_content;
25pub mod persistent_piece_content;
26pub mod piece_content;
27
28#[repr(u8)]
30#[derive(Debug, Clone, Copy, PartialEq, Eq)]
31pub enum Tag {
32 DownloadPiece = 0,
35
36 PieceContent = 1,
38
39 DownloadPersistentPiece = 2,
42
43 PersistentPieceContent = 3,
45
46 DownloadPersistentCachePiece = 4,
49
50 PersistentCachePieceContent = 5,
52
53 DownloadCachePiece = 6,
56
57 CachePieceContent = 7,
59
60 Reserved(u8),
62
63 Close = 254,
65
66 Error = 255,
68}
69
70impl From<u8> for Tag {
72 fn from(value: u8) -> Self {
74 match value {
75 0 => Tag::DownloadPiece,
76 1 => Tag::PieceContent,
77 2 => Tag::DownloadPersistentPiece,
78 3 => Tag::PersistentPieceContent,
79 4 => Tag::DownloadPersistentCachePiece,
80 5 => Tag::PersistentCachePieceContent,
81 6 => Tag::DownloadCachePiece,
82 7 => Tag::CachePieceContent,
83 8..=253 => Tag::Reserved(value),
84 254 => Tag::Close,
85 255 => Tag::Error,
86 }
87 }
88}
89
90impl From<Tag> for u8 {
92 fn from(tag: Tag) -> Self {
94 match tag {
95 Tag::DownloadPiece => 0,
96 Tag::PieceContent => 1,
97 Tag::DownloadPersistentPiece => 2,
98 Tag::PersistentPieceContent => 3,
99 Tag::DownloadPersistentCachePiece => 4,
100 Tag::PersistentCachePieceContent => 5,
101 Tag::DownloadCachePiece => 6,
102 Tag::CachePieceContent => 7,
103 Tag::Reserved(value) => value,
104 Tag::Close => 254,
105 Tag::Error => 255,
106 }
107 }
108}
109
110#[cfg(test)]
111mod tests {
112 use super::*;
113
114 #[test]
115 fn test_try_from_u8() {
116 assert_eq!(Tag::from(0), Tag::DownloadPiece);
117 assert_eq!(Tag::from(1), Tag::PieceContent);
118 assert_eq!(Tag::from(2), Tag::DownloadPersistentPiece);
119 assert_eq!(Tag::from(3), Tag::PersistentPieceContent);
120 assert_eq!(Tag::from(4), Tag::DownloadPersistentCachePiece);
121 assert_eq!(Tag::from(5), Tag::PersistentCachePieceContent);
122 assert_eq!(Tag::from(6), Tag::DownloadCachePiece);
123 assert_eq!(Tag::from(7), Tag::CachePieceContent);
124 assert_eq!(Tag::from(8), Tag::Reserved(8));
125 assert_eq!(Tag::from(253), Tag::Reserved(253));
126 assert_eq!(Tag::from(254), Tag::Close);
127 assert_eq!(Tag::from(255), Tag::Error);
128 }
129
130 #[test]
131 fn test_from_tag() {
132 assert_eq!(u8::from(Tag::DownloadPiece), 0);
133 assert_eq!(u8::from(Tag::PieceContent), 1);
134 assert_eq!(u8::from(Tag::DownloadPersistentPiece), 2);
135 assert_eq!(u8::from(Tag::PersistentPieceContent), 3);
136 assert_eq!(u8::from(Tag::DownloadPersistentCachePiece), 4);
137 assert_eq!(u8::from(Tag::PersistentCachePieceContent), 5);
138 assert_eq!(u8::from(Tag::DownloadCachePiece), 6);
139 assert_eq!(u8::from(Tag::CachePieceContent), 7);
140 assert_eq!(u8::from(Tag::Reserved(8)), 8);
141 assert_eq!(u8::from(Tag::Reserved(253)), 253);
142 assert_eq!(u8::from(Tag::Close), 254);
143 assert_eq!(u8::from(Tag::Error), 255);
144 }
145}