sentinel_core/core/base/
resource.rs1use crate::utils::format_time_nanos_curr;
3use serde::{Deserialize, Serialize};
4use std::fmt;
5
6#[derive(Debug, Copy, Clone, PartialEq, Serialize, Deserialize)]
8#[repr(u8)]
9pub enum ResourceType {
10 Common = 0,
11 Web,
12 RPC,
13 APIGateway,
14 DBSQL,
15 Cache,
16 MQ,
17}
18
19impl Default for ResourceType {
20 fn default() -> ResourceType {
21 ResourceType::Common
22 }
23}
24
25impl From<u8> for ResourceType {
27 fn from(num: u8) -> ResourceType {
28 match num {
29 1 => ResourceType::Web,
30 2 => ResourceType::RPC,
31 3 => ResourceType::APIGateway,
32 4 => ResourceType::DBSQL,
33 5 => ResourceType::Cache,
34 6 => ResourceType::MQ,
35 _ => ResourceType::Common,
36 }
37 }
38}
39
40#[derive(Debug, Copy, Clone, PartialEq)]
42pub enum TrafficType {
43 Outbound,
44 Inbound,
45}
46
47impl Default for TrafficType {
48 fn default() -> TrafficType {
49 TrafficType::Outbound
50 }
51}
52
53#[derive(Debug, Clone)]
55pub struct ResourceWrapper {
56 name: String,
58 resource_type: ResourceType,
60 traffic_type: TrafficType,
62}
63
64impl Default for ResourceWrapper {
65 fn default() -> Self {
66 ResourceWrapper {
67 name: format_time_nanos_curr(),
68 resource_type: ResourceType::default(),
69 traffic_type: TrafficType::default(),
70 }
71 }
72}
73
74impl fmt::Display for ResourceWrapper {
75 fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
76 write!(
77 f,
78 "ResourceWrapper{{name={}, flowType={:?}, resource_type={:?}}}",
79 self.name, self.traffic_type, self.resource_type
80 )
81 }
82}
83
84impl ResourceWrapper {
85 pub fn new(name: String, resource_type: ResourceType, traffic_type: TrafficType) -> Self {
86 ResourceWrapper {
87 name,
88 resource_type,
89 traffic_type,
90 }
91 }
92 pub fn name(&self) -> &String {
93 &self.name
94 }
95
96 pub fn resource_type(&self) -> &ResourceType {
97 &self.resource_type
98 }
99 pub fn traffic_type(&self) -> &TrafficType {
100 &self.traffic_type
101 }
102}