ipmi_rs/connection/
request.rs

1use crate::connection::{LogicalUnit, NetFn};
2
3use super::{Address, Channel, Message};
4
5pub struct Request {
6    target: RequestTargetAddress,
7    message: Message,
8}
9
10impl Request {
11    pub const fn new(request: Message, target: RequestTargetAddress) -> Self {
12        Self {
13            target,
14            message: request,
15        }
16    }
17
18    pub fn netfn(&self) -> NetFn {
19        self.message.netfn()
20    }
21
22    pub fn netfn_raw(&self) -> u8 {
23        self.message.netfn_raw()
24    }
25
26    pub fn cmd(&self) -> u8 {
27        self.message.cmd
28    }
29
30    pub fn data(&self) -> &[u8] {
31        self.message.data()
32    }
33
34    pub fn data_mut(&mut self) -> &mut [u8] {
35        self.message.data_mut()
36    }
37
38    pub fn target(&self) -> RequestTargetAddress {
39        self.target
40    }
41}
42
43#[derive(Copy, Clone, Debug, PartialEq)]
44pub enum RequestTargetAddress {
45    Bmc(LogicalUnit),
46    BmcOrIpmb(Address, Channel, LogicalUnit),
47}
48
49impl RequestTargetAddress {
50    pub fn lun(&self) -> LogicalUnit {
51        match self {
52            RequestTargetAddress::Bmc(lun) | RequestTargetAddress::BmcOrIpmb(_, _, lun) => *lun,
53        }
54    }
55}