tmf656_slice/
models.rs

1//! TMF656 Slice Management models
2
3use chrono::{DateTime, Utc};
4use serde::{Deserialize, Serialize};
5use tmf_apis_core::BaseEntity;
6use utoipa::ToSchema;
7use uuid::Uuid;
8
9/// Slice State
10#[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/// Slice Type
20#[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/// Network Slice - Represents a 5G network slice
30#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
31pub struct NetworkSlice {
32    #[serde(flatten)]
33    pub base: BaseEntity,
34    /// Slice state
35    pub state: SliceState,
36    /// Slice type
37    pub slice_type: SliceType,
38    /// Service Level Agreement (SLA) parameters
39    #[serde(skip_serializing_if = "Option::is_none")]
40    pub sla_parameters: Option<SLAParameters>,
41    /// Network function references
42    #[serde(skip_serializing_if = "Option::is_none")]
43    pub network_functions: Option<Vec<NetworkFunctionRef>>,
44    /// Activation date
45    #[serde(skip_serializing_if = "Option::is_none")]
46    #[schema(value_type = String, format = "date-time")]
47    pub activation_date: Option<DateTime<Utc>>,
48    /// Termination date
49    #[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/// SLA Parameters
55#[derive(Debug, Clone, Serialize, Deserialize, ToSchema)]
56pub struct SLAParameters {
57    /// Maximum latency in milliseconds
58    #[serde(skip_serializing_if = "Option::is_none")]
59    pub max_latency_ms: Option<u32>,
60    /// Minimum throughput in Mbps
61    #[serde(skip_serializing_if = "Option::is_none")]
62    pub min_throughput_mbps: Option<u32>,
63    /// Maximum number of devices
64    #[serde(skip_serializing_if = "Option::is_none")]
65    pub max_devices: Option<u32>,
66    /// Coverage area
67    #[serde(skip_serializing_if = "Option::is_none")]
68    pub coverage_area: Option<String>,
69}
70
71/// Network Function Reference
72#[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/// Request to create a network slice
84#[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/// Request to create SLA parameters
102#[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/// Request to create a network function reference
115#[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/// Request to update a network slice
125#[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}