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] {
41 self.message.data()
42 }
43
44 pub fn data_mut(&mut self) -> &mut [u8] {
46 self.message.data_mut()
47 }
48
49 pub fn target(&self) -> RequestTargetAddress {
51 self.target
52 }
53}
54
55#[derive(Copy, Clone, Debug, PartialEq)]
57pub enum RequestTargetAddress {
58 Bmc(LogicalUnit),
60 BmcOrIpmb(Address, Channel, LogicalUnit),
62}
63
64impl RequestTargetAddress {
65 pub fn lun(&self) -> LogicalUnit {
67 match self {
68 RequestTargetAddress::Bmc(lun) | RequestTargetAddress::BmcOrIpmb(_, _, lun) => *lun,
69 }
70 }
71}