Coverage Report

Created: 2026-07-14 06:05

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/open5gs/lib/sbi/openapi/model/vfl_info.c
Line
Count
Source
1
2
#include <stdlib.h>
3
#include <string.h>
4
#include <stdio.h>
5
#include "vfl_info.h"
6
7
OpenAPI_vfl_info_t *OpenAPI_vfl_info_create(
8
    OpenAPI_list_t *ml_analytics_ids,
9
    OpenAPI_vfl_capability_type_e vfl_capability_type,
10
    bool is_vfl_client_aggr_cap,
11
    int vfl_client_aggr_cap,
12
    OpenAPI_time_window_t *vfl_time_interval,
13
    OpenAPI_ml_model_inter_info_t *vfl_inter_info,
14
    OpenAPI_list_t *feature_ids
15
)
16
0
{
17
0
    OpenAPI_vfl_info_t *vfl_info_local_var = ogs_malloc(sizeof(OpenAPI_vfl_info_t));
18
0
    ogs_assert(vfl_info_local_var);
19
20
0
    vfl_info_local_var->ml_analytics_ids = ml_analytics_ids;
21
0
    vfl_info_local_var->vfl_capability_type = vfl_capability_type;
22
0
    vfl_info_local_var->is_vfl_client_aggr_cap = is_vfl_client_aggr_cap;
23
0
    vfl_info_local_var->vfl_client_aggr_cap = vfl_client_aggr_cap;
24
0
    vfl_info_local_var->vfl_time_interval = vfl_time_interval;
25
0
    vfl_info_local_var->vfl_inter_info = vfl_inter_info;
26
0
    vfl_info_local_var->feature_ids = feature_ids;
27
28
0
    return vfl_info_local_var;
29
0
}
30
31
void OpenAPI_vfl_info_free(OpenAPI_vfl_info_t *vfl_info)
32
0
{
33
0
    OpenAPI_lnode_t *node = NULL;
34
35
0
    if (NULL == vfl_info) {
36
0
        return;
37
0
    }
38
0
    if (vfl_info->ml_analytics_ids) {
39
0
        OpenAPI_list_free(vfl_info->ml_analytics_ids);
40
0
        vfl_info->ml_analytics_ids = NULL;
41
0
    }
42
0
    if (vfl_info->vfl_time_interval) {
43
0
        OpenAPI_time_window_free(vfl_info->vfl_time_interval);
44
0
        vfl_info->vfl_time_interval = NULL;
45
0
    }
46
0
    if (vfl_info->vfl_inter_info) {
47
0
        OpenAPI_ml_model_inter_info_free(vfl_info->vfl_inter_info);
48
0
        vfl_info->vfl_inter_info = NULL;
49
0
    }
50
0
    if (vfl_info->feature_ids) {
51
0
        OpenAPI_list_for_each(vfl_info->feature_ids, node) {
52
0
            ogs_free(node->data);
53
0
        }
54
0
        OpenAPI_list_free(vfl_info->feature_ids);
55
0
        vfl_info->feature_ids = NULL;
56
0
    }
57
0
    ogs_free(vfl_info);
58
0
}
59
60
cJSON *OpenAPI_vfl_info_convertToJSON(OpenAPI_vfl_info_t *vfl_info)
61
0
{
62
0
    cJSON *item = NULL;
63
0
    OpenAPI_lnode_t *node = NULL;
64
65
0
    if (vfl_info == NULL) {
66
0
        ogs_error("OpenAPI_vfl_info_convertToJSON() failed [VflInfo]");
67
0
        return NULL;
68
0
    }
69
70
0
    item = cJSON_CreateObject();
71
0
    if (vfl_info->ml_analytics_ids == OpenAPI_nwdaf_event_NULL) {
72
0
        ogs_error("OpenAPI_vfl_info_convertToJSON() failed [ml_analytics_ids]");
73
0
        return NULL;
74
0
    }
75
0
    cJSON *ml_analytics_idsList = cJSON_AddArrayToObject(item, "mlAnalyticsIds");
76
0
    if (ml_analytics_idsList == NULL) {
77
0
        ogs_error("OpenAPI_vfl_info_convertToJSON() failed [ml_analytics_ids]");
78
0
        goto end;
79
0
    }
80
0
    OpenAPI_list_for_each(vfl_info->ml_analytics_ids, node) {
81
0
        if (cJSON_AddStringToObject(ml_analytics_idsList, "", OpenAPI_nwdaf_event_ToString((intptr_t)node->data)) == NULL) {
82
0
            ogs_error("OpenAPI_vfl_info_convertToJSON() failed [ml_analytics_ids]");
83
0
            goto end;
84
0
        }
85
0
    }
86
87
0
    if (vfl_info->vfl_capability_type == OpenAPI_vfl_capability_type_NULL) {
88
0
        ogs_error("OpenAPI_vfl_info_convertToJSON() failed [vfl_capability_type]");
89
0
        return NULL;
90
0
    }
91
0
    if (cJSON_AddStringToObject(item, "vflCapabilityType", OpenAPI_vfl_capability_type_ToString(vfl_info->vfl_capability_type)) == NULL) {
92
0
        ogs_error("OpenAPI_vfl_info_convertToJSON() failed [vfl_capability_type]");
93
0
        goto end;
94
0
    }
95
96
0
    if (vfl_info->is_vfl_client_aggr_cap) {
97
0
    if (cJSON_AddBoolToObject(item, "vflClientAggrCap", vfl_info->vfl_client_aggr_cap) == NULL) {
98
0
        ogs_error("OpenAPI_vfl_info_convertToJSON() failed [vfl_client_aggr_cap]");
99
0
        goto end;
100
0
    }
101
0
    }
102
103
0
    if (vfl_info->vfl_time_interval) {
104
0
    cJSON *vfl_time_interval_local_JSON = OpenAPI_time_window_convertToJSON(vfl_info->vfl_time_interval);
105
0
    if (vfl_time_interval_local_JSON == NULL) {
106
0
        ogs_error("OpenAPI_vfl_info_convertToJSON() failed [vfl_time_interval]");
107
0
        goto end;
108
0
    }
109
0
    cJSON_AddItemToObject(item, "vflTimeInterval", vfl_time_interval_local_JSON);
110
0
    if (item->child == NULL) {
111
0
        ogs_error("OpenAPI_vfl_info_convertToJSON() failed [vfl_time_interval]");
112
0
        goto end;
113
0
    }
114
0
    }
115
116
0
    if (vfl_info->vfl_inter_info) {
117
0
    cJSON *vfl_inter_info_local_JSON = OpenAPI_ml_model_inter_info_convertToJSON(vfl_info->vfl_inter_info);
118
0
    if (vfl_inter_info_local_JSON == NULL) {
119
0
        ogs_error("OpenAPI_vfl_info_convertToJSON() failed [vfl_inter_info]");
120
0
        goto end;
121
0
    }
122
0
    cJSON_AddItemToObject(item, "vflInterInfo", vfl_inter_info_local_JSON);
123
0
    if (item->child == NULL) {
124
0
        ogs_error("OpenAPI_vfl_info_convertToJSON() failed [vfl_inter_info]");
125
0
        goto end;
126
0
    }
127
0
    }
128
129
0
    if (vfl_info->feature_ids) {
130
0
    cJSON *feature_idsList = cJSON_AddArrayToObject(item, "featureIds");
131
0
    if (feature_idsList == NULL) {
132
0
        ogs_error("OpenAPI_vfl_info_convertToJSON() failed [feature_ids]");
133
0
        goto end;
134
0
    }
135
0
    OpenAPI_list_for_each(vfl_info->feature_ids, node) {
136
0
        if (cJSON_AddStringToObject(feature_idsList, "", (char*)node->data) == NULL) {
137
0
            ogs_error("OpenAPI_vfl_info_convertToJSON() failed [feature_ids]");
138
0
            goto end;
139
0
        }
140
0
    }
141
0
    }
142
143
0
end:
144
0
    return item;
145
0
}
146
147
OpenAPI_vfl_info_t *OpenAPI_vfl_info_parseFromJSON(cJSON *vfl_infoJSON)
148
0
{
149
0
    OpenAPI_vfl_info_t *vfl_info_local_var = NULL;
150
0
    OpenAPI_lnode_t *node = NULL;
151
0
    cJSON *ml_analytics_ids = NULL;
152
0
    OpenAPI_list_t *ml_analytics_idsList = NULL;
153
0
    cJSON *vfl_capability_type = NULL;
154
0
    OpenAPI_vfl_capability_type_e vfl_capability_typeVariable = 0;
155
0
    cJSON *vfl_client_aggr_cap = NULL;
156
0
    cJSON *vfl_time_interval = NULL;
157
0
    OpenAPI_time_window_t *vfl_time_interval_local_nonprim = NULL;
158
0
    cJSON *vfl_inter_info = NULL;
159
0
    OpenAPI_ml_model_inter_info_t *vfl_inter_info_local_nonprim = NULL;
160
0
    cJSON *feature_ids = NULL;
161
0
    OpenAPI_list_t *feature_idsList = NULL;
162
0
    ml_analytics_ids = cJSON_GetObjectItemCaseSensitive(vfl_infoJSON, "mlAnalyticsIds");
163
0
    if (!ml_analytics_ids) {
164
0
        ogs_error("OpenAPI_vfl_info_parseFromJSON() failed [ml_analytics_ids]");
165
0
        goto end;
166
0
    }
167
0
        cJSON *ml_analytics_ids_local = NULL;
168
0
        if (!cJSON_IsArray(ml_analytics_ids)) {
169
0
            ogs_error("OpenAPI_vfl_info_parseFromJSON() failed [ml_analytics_ids]");
170
0
            goto end;
171
0
        }
172
173
0
        ml_analytics_idsList = OpenAPI_list_create();
174
175
0
        cJSON_ArrayForEach(ml_analytics_ids_local, ml_analytics_ids) {
176
0
            OpenAPI_nwdaf_event_e localEnum = OpenAPI_nwdaf_event_NULL;
177
0
            if (!cJSON_IsString(ml_analytics_ids_local)) {
178
0
                ogs_error("OpenAPI_vfl_info_parseFromJSON() failed [ml_analytics_ids]");
179
0
                goto end;
180
0
            }
181
0
            localEnum = OpenAPI_nwdaf_event_FromString(ml_analytics_ids_local->valuestring);
182
0
            if (!localEnum) {
183
0
                ogs_info("Enum value \"%s\" for field \"ml_analytics_ids\" is not supported. Ignoring it ...",
184
0
                         ml_analytics_ids_local->valuestring);
185
0
            } else {
186
0
                OpenAPI_list_add(ml_analytics_idsList, (void *)localEnum);
187
0
            }
188
0
        }
189
0
        if (ml_analytics_idsList->count == 0) {
190
0
            ogs_error("OpenAPI_vfl_info_parseFromJSON() failed: Expected ml_analytics_idsList to not be empty (after ignoring unsupported enum values).");
191
0
            goto end;
192
0
        }
193
194
0
    vfl_capability_type = cJSON_GetObjectItemCaseSensitive(vfl_infoJSON, "vflCapabilityType");
195
0
    if (!vfl_capability_type) {
196
0
        ogs_error("OpenAPI_vfl_info_parseFromJSON() failed [vfl_capability_type]");
197
0
        goto end;
198
0
    }
199
0
    if (!cJSON_IsString(vfl_capability_type)) {
200
0
        ogs_error("OpenAPI_vfl_info_parseFromJSON() failed [vfl_capability_type]");
201
0
        goto end;
202
0
    }
203
0
    vfl_capability_typeVariable = OpenAPI_vfl_capability_type_FromString(vfl_capability_type->valuestring);
204
205
0
    vfl_client_aggr_cap = cJSON_GetObjectItemCaseSensitive(vfl_infoJSON, "vflClientAggrCap");
206
0
    if (vfl_client_aggr_cap) {
207
0
    if (!cJSON_IsBool(vfl_client_aggr_cap)) {
208
0
        ogs_error("OpenAPI_vfl_info_parseFromJSON() failed [vfl_client_aggr_cap]");
209
0
        goto end;
210
0
    }
211
0
    }
212
213
0
    vfl_time_interval = cJSON_GetObjectItemCaseSensitive(vfl_infoJSON, "vflTimeInterval");
214
0
    if (vfl_time_interval) {
215
0
    vfl_time_interval_local_nonprim = OpenAPI_time_window_parseFromJSON(vfl_time_interval);
216
0
    if (!vfl_time_interval_local_nonprim) {
217
0
        ogs_error("OpenAPI_time_window_parseFromJSON failed [vfl_time_interval]");
218
0
        goto end;
219
0
    }
220
0
    }
221
222
0
    vfl_inter_info = cJSON_GetObjectItemCaseSensitive(vfl_infoJSON, "vflInterInfo");
223
0
    if (vfl_inter_info) {
224
0
    vfl_inter_info_local_nonprim = OpenAPI_ml_model_inter_info_parseFromJSON(vfl_inter_info);
225
0
    if (!vfl_inter_info_local_nonprim) {
226
0
        ogs_error("OpenAPI_ml_model_inter_info_parseFromJSON failed [vfl_inter_info]");
227
0
        goto end;
228
0
    }
229
0
    }
230
231
0
    feature_ids = cJSON_GetObjectItemCaseSensitive(vfl_infoJSON, "featureIds");
232
0
    if (feature_ids) {
233
0
        cJSON *feature_ids_local = NULL;
234
0
        if (!cJSON_IsArray(feature_ids)) {
235
0
            ogs_error("OpenAPI_vfl_info_parseFromJSON() failed [feature_ids]");
236
0
            goto end;
237
0
        }
238
239
0
        feature_idsList = OpenAPI_list_create();
240
241
0
        cJSON_ArrayForEach(feature_ids_local, feature_ids) {
242
0
            double *localDouble = NULL;
243
0
            int *localInt = NULL;
244
0
            if (!cJSON_IsString(feature_ids_local)) {
245
0
                ogs_error("OpenAPI_vfl_info_parseFromJSON() failed [feature_ids]");
246
0
                goto end;
247
0
            }
248
0
            OpenAPI_list_add(feature_idsList, ogs_strdup(feature_ids_local->valuestring));
249
0
        }
250
0
    }
251
252
0
    vfl_info_local_var = OpenAPI_vfl_info_create (
253
0
        ml_analytics_idsList,
254
0
        vfl_capability_typeVariable,
255
0
        vfl_client_aggr_cap ? true : false,
256
0
        vfl_client_aggr_cap ? vfl_client_aggr_cap->valueint : 0,
257
0
        vfl_time_interval ? vfl_time_interval_local_nonprim : NULL,
258
0
        vfl_inter_info ? vfl_inter_info_local_nonprim : NULL,
259
0
        feature_ids ? feature_idsList : NULL
260
0
    );
261
262
0
    return vfl_info_local_var;
263
0
end:
264
0
    if (ml_analytics_idsList) {
265
0
        OpenAPI_list_free(ml_analytics_idsList);
266
0
        ml_analytics_idsList = NULL;
267
0
    }
268
0
    if (vfl_time_interval_local_nonprim) {
269
0
        OpenAPI_time_window_free(vfl_time_interval_local_nonprim);
270
0
        vfl_time_interval_local_nonprim = NULL;
271
0
    }
272
0
    if (vfl_inter_info_local_nonprim) {
273
0
        OpenAPI_ml_model_inter_info_free(vfl_inter_info_local_nonprim);
274
0
        vfl_inter_info_local_nonprim = NULL;
275
0
    }
276
0
    if (feature_idsList) {
277
0
        OpenAPI_list_for_each(feature_idsList, node) {
278
0
            ogs_free(node->data);
279
0
        }
280
0
        OpenAPI_list_free(feature_idsList);
281
0
        feature_idsList = NULL;
282
0
    }
283
0
    return NULL;
284
0
}
285
286
OpenAPI_vfl_info_t *OpenAPI_vfl_info_copy(OpenAPI_vfl_info_t *dst, OpenAPI_vfl_info_t *src)
287
0
{
288
0
    cJSON *item = NULL;
289
0
    char *content = NULL;
290
291
0
    ogs_assert(src);
292
0
    item = OpenAPI_vfl_info_convertToJSON(src);
293
0
    if (!item) {
294
0
        ogs_error("OpenAPI_vfl_info_convertToJSON() failed");
295
0
        return NULL;
296
0
    }
297
298
0
    content = cJSON_Print(item);
299
0
    cJSON_Delete(item);
300
301
0
    if (!content) {
302
0
        ogs_error("cJSON_Print() failed");
303
0
        return NULL;
304
0
    }
305
306
0
    item = cJSON_Parse(content);
307
0
    ogs_free(content);
308
0
    if (!item) {
309
0
        ogs_error("cJSON_Parse() failed");
310
0
        return NULL;
311
0
    }
312
313
0
    OpenAPI_vfl_info_free(dst);
314
0
    dst = OpenAPI_vfl_info_parseFromJSON(item);
315
0
    cJSON_Delete(item);
316
317
0
    return dst;
318
0
}
319