ipmi_rs/connection/
request.rs1use 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}