1use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use tmf_apis_core::BaseEntity;
6use utoipa::ToSchema;
7use uuid::Uuid;
8
9#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
11#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
12pub enum SliceState {
13 Planned,
14 Active,
15 Inactive,
16 Terminated,
17}
18
19#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
21#[serde(rename_all = "SCREAMING_SNAKE_CASE")]
22pub enum SliceType {
23 EnhancedMobileBroadband,
24 UltraReliableLowLatency,
25 MassiveMachineTypeCommunications,
26 Custom,
27}
28
29#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
31pub struct NetworkSlice {
32 #[serde(flatten)]
33 pub base: BaseEntity,
34 pub state: SliceState,
36 pub slice_type: SliceType,
38 #[serde(skip_serializing_if = "Option::is_none")]
40 pub sla_parameters: Option<SLAParameters>,
41 #[serde(skip_serializing_if = "Option::is_none")]
43 pub network_functions: Option<Vec<NetworkFunctionRef>>,
44 #[serde(skip_serializing_if = "Option::is_none")]
46 #[schema(value_type = String, format = "date-time")]
47 pub activation_date: Option<DateTime<Utc>>,
48 #[serde(skip_serializing_if = "Option::is_none")]
50 #[schema(value_type = String, format = "date-time")]
51 pub termination_date: Option<DateTime<Utc>>,
52}
53
54#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
56pub struct SLAParameters {
57 #[serde(skip_serializing_if = "Option::is_none")]
59 pub max_latency_ms: Option<u32>,
60 #[serde(skip_serializing_if = "Option::is_none")]
62 pub min_throughput_mbps: Option<u32>,
63 #[serde(skip_serializing_if = "Option::is_none")]
65 pub max_devices: Option<u32>,
66 #[serde(skip_serializing_if = "Option::is_none")]
68 pub coverage_area: Option<String>,
69}
70
71#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
73pub struct NetworkFunctionRef {
74 #[schema(value_type = String, format = "uuid")]
75 pub id: Uuid,
76 #[serde(skip_serializing_if = "Option::is_none")]
77 pub href: Option<String>,
78 pub name: String,
79 #[serde(skip_serializing_if = "Option::is_none")]
80 pub function_type: Option<String>,
81}
82
83#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
85pub struct CreateNetworkSliceRequest {
86 pub name: String,
87 #[serde(skip_serializing_if = "Option::is_none")]
88 pub description: Option<String>,
89 #[serde(skip_serializing_if = "Option::is_none")]
90 pub version: Option<String>,
91 pub slice_type: SliceType,
92 #[serde(skip_serializing_if = "Option::is_none")]
93 pub sla_parameters: Option<CreateSLAParametersRequest>,
94 #[serde(skip_serializing_if = "Option::is_none")]
95 pub network_functions: Option<Vec<CreateNetworkFunctionRefRequest>>,
96 #[serde(skip_serializing_if = "Option::is_none")]
97 #[schema(value_type = String, format = "date-time")]
98 pub activation_date: Option<DateTime<Utc>>,
99}
100
101#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
103pub struct CreateSLAParametersRequest {
104 #[serde(skip_serializing_if = "Option::is_none")]
105 pub max_latency_ms: Option<u32>,
106 #[serde(skip_serializing_if = "Option::is_none")]
107 pub min_throughput_mbps: Option<u32>,
108 #[serde(skip_serializing_if = "Option::is_none")]
109 pub max_devices: Option<u32>,
110 #[serde(skip_serializing_if = "Option::is_none")]
111 pub coverage_area: Option<String>,
112}
113
114#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
116pub struct CreateNetworkFunctionRefRequest {
117 #[schema(value_type = String, format = "uuid")]
118 pub id: Uuid,
119 pub name: String,
120 #[serde(skip_serializing_if = "Option::is_none")]
121 pub function_type: Option<String>,
122}
123
124#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
126pub struct UpdateNetworkSliceRequest {
127 #[serde(skip_serializing_if = "Option::is_none")]
128 pub state: Option<SliceState>,
129 #[serde(skip_serializing_if = "Option::is_none")]
130 #[schema(value_type = String, format = "date-time")]
131 pub activation_date: Option<DateTime<Utc>>,
132 #[serde(skip_serializing_if = "Option::is_none")]
133 #[schema(value_type = String, format = "date-time")]
134 pub termination_date: Option<DateTime<Utc>>,
135}