ipmi_rs_core/connection/
request.rs1use crate::connection::{LogicalUnit, NetFn};
2
3use super::{Address, Channel, Message};
4
5pub struct Request {
7 target: RequestTargetAddress,
8 message: Message,
9}
10
11impl Request {
12 pub const fn new(request: Message, target: RequestTargetAddress) -> Self {
17 Self {
18 target,
19 message: request,
20 }
21 }
22
23 pub fn netfn(&self) -> NetFn {
25 self.message.netfn()
26 }
27
28 pub fn netfn_raw(&self) -> u8 {
30 self.message.netfn_raw()
31 }
32
33 pub fn cmd(&self) -> u8 {
35 self.message.cmd
36 }
37
38 pub fn data(&self) -> &[u8] {
40 self.message.data()
41 }
42
43 pub fn data_mut(&mut self) -> &mut [u8] {
45 self.message.data_mut()
46 }
47
48 pub fn target(&self) -> RequestTargetAddress {
50 self.target
51 }
52}
53
54#[derive(Copy, Clone, Debug, PartialEq)]
56pub enum RequestTargetAddress {
57 Bmc(LogicalUnit),
59 BmcOrIpmb(Address, Channel, LogicalUnit),
61}
62
63impl RequestTargetAddress {
64 pub fn lun(&self) -> LogicalUnit {
66 match self {
67 RequestTargetAddress::Bmc(lun) | RequestTargetAddress::BmcOrIpmb(_, _, lun) => *lun,
68 }
69 }
70}