saluki_core/data_model/payload/
mod.rs1use std::fmt;
4
5use bitmask_enum::bitmask;
6
7mod http;
8pub use self::http::HttpPayload;
9use crate::topology::interconnect::Dispatchable;
10
11mod metadata;
12pub use self::metadata::PayloadMetadata;
13
14mod raw;
15pub use self::raw::RawPayload;
16
17#[bitmask(u8)]
22#[bitmask_config(vec_debug)]
23pub enum PayloadType {
24 Raw,
26
27 Http,
29}
30
31impl Default for PayloadType {
32 fn default() -> Self {
33 Self::none()
34 }
35}
36
37impl fmt::Display for PayloadType {
38 fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
39 let mut types = Vec::new();
40
41 if self.contains(Self::Raw) {
42 types.push("Raw");
43 }
44
45 if self.contains(Self::Http) {
46 types.push("HTTP");
47 }
48
49 write!(f, "{}", types.join("|"))
50 }
51}
52
53#[derive(Clone)]
55#[allow(clippy::large_enum_variant)]
56pub enum Payload {
57 Raw(RawPayload),
61
62 Http(HttpPayload),
66}
67
68impl Payload {
69 pub fn payload_type(&self) -> PayloadType {
71 match self {
72 Payload::Raw(_) => PayloadType::Raw,
73 Payload::Http(_) => PayloadType::Http,
74 }
75 }
76
77 pub fn try_into_raw(self) -> Option<RawPayload> {
81 match self {
82 Payload::Raw(payload) => Some(payload),
83 _ => None,
84 }
85 }
86
87 pub fn try_into_http_payload(self) -> Option<HttpPayload> {
91 match self {
92 Payload::Http(payload) => Some(payload),
93 _ => None,
94 }
95 }
96}
97
98impl Dispatchable for Payload {
99 fn item_count(&self) -> usize {
100 1
101 }
102}