1use crate::{
2 decoder::{Decodable, Decoder},
3 encoder::{Encodable, Encoder},
4 error::{DecodeResult, EncodeResult},
5};
6#[cfg(feature = "serde")]
7use serde::{Deserialize, Serialize};
8
9#[cfg_attr(feature = "serde", derive(Serialize, Deserialize))]
11#[derive(Debug, Clone, Copy, PartialEq, Eq)]
12pub enum Opcode {
13 BootRequest,
15 BootReply,
17 Unknown(u8),
19}
20
21impl Decodable for Opcode {
22 fn decode(decoder: &mut Decoder<'_>) -> DecodeResult<Self> {
23 Ok(decoder.read_u8()?.into())
24 }
25}
26
27impl Encodable for Opcode {
28 fn encode(&self, e: &'_ mut Encoder<'_>) -> EncodeResult<()> {
29 e.write_u8((*self).into())
30 }
31}
32
33impl From<u8> for Opcode {
34 fn from(opcode: u8) -> Self {
35 match opcode {
36 1 => Opcode::BootRequest,
37 2 => Opcode::BootReply,
38 _ => Opcode::Unknown(opcode),
39 }
40 }
41}
42impl From<Opcode> for u8 {
43 fn from(opcode: Opcode) -> Self {
44 match opcode {
45 Opcode::BootRequest => 1,
46 Opcode::BootReply => 2,
47 Opcode::Unknown(opcode) => opcode,
48 }
49 }
50}