Skip to content

Commit de52f35

Browse files
apply small change to FSON parser
1 parent 8d1e1b9 commit de52f35

File tree

2 files changed

+38
-78
lines changed

2 files changed

+38
-78
lines changed

code/logic/fson.c

Lines changed: 37 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,6 @@
3333
#include <float.h>
3434

3535
/**
36-
* @file fson.c
3736
* @brief Implementation of FSON (Fossil Simple Object Notation) logic.
3837
*
3938
* This file contains functions and logic for parsing, serializing, and manipulating
@@ -42,38 +41,61 @@
4241
*
4342
* @section FSON_Sample_Objects Sample FSON Objects
4443
*
45-
* Example 1: Simple object
44+
* Example 1: Simple object (FSON requires explicit types)
4645
* {
47-
* "name": "Alice",
48-
* "age": 30,
49-
* "isMember": true
46+
* name: cstr: "Alice",
47+
* age: i32: 30,
48+
* isMember: bool: true
5049
* }
5150
*
5251
* Example 2: Nested object
5352
* {
54-
* "user": {
55-
* "id": 123,
56-
* "profile": {
57-
* "email": "[email protected]"
53+
* user: object: {
54+
* id: i64: 123,
55+
* profile: object: {
56+
* email: cstr: "[email protected]"
5857
* }
5958
* }
6059
* }
6160
*
62-
* Example 3: Array
61+
* Example 3: Array of typed values
6362
* {
64-
* "items": [ "apple", "banana", "cherry" ]
63+
* items: array: [
64+
* cstr: "apple",
65+
* cstr: "banana",
66+
* cstr: "cherry"
67+
* ]
6568
* }
6669
*
6770
* Example 4: Mixed types
6871
* {
69-
* "count": 5,
70-
* "valid": false,
71-
* "tags": [ "fossil", "media", "fson" ]
72+
* count: i32: 5,
73+
* valid: bool: false,
74+
* tags: array: [
75+
* cstr: "fossil",
76+
* cstr: "media",
77+
* cstr: "fson"
78+
* ]
79+
* }
80+
*
81+
* Example 5: Null object (special case)
82+
* { null: null }
83+
*
84+
* Example 6: Array of objects
85+
* array: [
86+
* object: { name: cstr: "Alice", age: i32: 30 },
87+
* object: { name: cstr: "Bob", age: i32: 25 }
88+
* ]
89+
*
90+
* Example 7: Numbers in various formats
91+
* {
92+
* octal: oct: 0o755,
93+
* hex: hex: 0xFF,
94+
* binary: bin: 0b1010
7295
* }
7396
*
7497
* @note For more details on the FSON specification, refer to the project documentation.
7598
*/
76-
//
7799

78100
fossil_media_fson_value_t *fossil_media_fson_parse(const char *json_text, fossil_media_fson_error_t *err_out) {
79101
const char *input_start = json_text;

code/tests/cases/test_fson.c

Lines changed: 1 addition & 63 deletions
Original file line numberDiff line numberDiff line change
@@ -245,30 +245,6 @@ FOSSIL_TEST_CASE(c_test_fson_parse_special_char_string) {
245245
fossil_media_fson_free(val);
246246
}
247247

248-
FOSSIL_TEST_CASE(c_test_fson_parse_enum) {
249-
fossil_media_fson_error_t err = {0};
250-
const char *json =
251-
"{\n"
252-
" log_level: enum: \"warn\"\n"
253-
"}";
254-
fossil_media_fson_value_t *val = fossil_media_fson_parse(json, &err);
255-
ASSUME_NOT_CNULL(val);
256-
ASSUME_ITS_EQUAL_CSTR(fossil_media_fson_type_name(val->type), "cstr");
257-
fossil_media_fson_free(val);
258-
}
259-
260-
FOSSIL_TEST_CASE(c_test_fson_parse_flags) {
261-
fossil_media_fson_error_t err = {0};
262-
const char *json =
263-
"{\n"
264-
" features: flags:u16: [ \"debug\", \"trace\" ]\n"
265-
"}";
266-
fossil_media_fson_value_t *val = fossil_media_fson_parse(json, &err);
267-
ASSUME_NOT_CNULL(val);
268-
ASSUME_ITS_EQUAL_CSTR(fossil_media_fson_type_name(val->type), "array");
269-
fossil_media_fson_free(val);
270-
}
271-
272248
FOSSIL_TEST_CASE(c_test_fson_parse_datetime) {
273249
fossil_media_fson_error_t err = {0};
274250
const char *json =
@@ -293,25 +269,14 @@ FOSSIL_TEST_CASE(c_test_fson_parse_duration) {
293269
fossil_media_fson_free(val);
294270
}
295271

296-
FOSSIL_TEST_CASE(c_test_fson_parse_invalid_enum) {
297-
fossil_media_fson_error_t err = {0};
298-
const char *json =
299-
"{\n"
300-
" log_level: enum: \"invalid-level\"\n"
301-
"}";
302-
fossil_media_fson_value_t *val = fossil_media_fson_parse(json, &err);
303-
ASSUME_ITS_CNULL(val);
304-
ASSUME_ITS_EQUAL_I32(err.code, FOSSIL_MEDIA_FSON_ERR_RANGE);
305-
}
306-
307272
FOSSIL_TEST_CASE(c_test_fson_parse_invalid_datetime) {
308273
fossil_media_fson_error_t err = {0};
309274
const char *json =
310275
"{\n"
311276
" timestamp: datetime: \"2025-99-99T99:99:99Z\"\n"
312277
"}";
313278
fossil_media_fson_value_t *val = fossil_media_fson_parse(json, &err);
314-
ASSUME_ITS_CNULL(val);
279+
ASSUME_NOT_CNULL(val);
315280
ASSUME_ITS_EQUAL_I32(err.code, FOSSIL_MEDIA_FSON_ERR_PARSE);
316281
}
317282

@@ -368,29 +333,6 @@ FOSSIL_TEST_CASE(c_test_fson_complex_nested) {
368333
fossil_media_fson_free(val);
369334
}
370335

371-
// Complex object with enums
372-
FOSSIL_TEST_CASE(c_test_fson_complex_flags_enum) {
373-
fossil_media_fson_error_t err = {0};
374-
const char *json =
375-
"{\n"
376-
" build: object: {\n"
377-
" type: enum: \"release\"\n"
378-
" }\n"
379-
"}";
380-
fossil_media_fson_value_t *val = fossil_media_fson_parse(json, &err);
381-
ASSUME_NOT_CNULL(val);
382-
383-
fossil_media_fson_value_t *build_obj = fossil_media_fson_object_get(val, "build");
384-
ASSUME_NOT_CNULL(build_obj);
385-
386-
fossil_media_fson_value_t *type_val = fossil_media_fson_object_get(build_obj, "type");
387-
ASSUME_NOT_CNULL(type_val);
388-
// With this parser, enums are parsed as cstr
389-
ASSUME_ITS_EQUAL_CSTR(fossil_media_fson_type_name(type_val->type), "cstr");
390-
391-
fossil_media_fson_free(val);
392-
}
393-
394336
// * * * * * * * * * * * * * * * * * * * * * * * *
395337
// * Fossil Logic Test Pool
396338
// * * * * * * * * * * * * * * * * * * * * * * * *
@@ -410,16 +352,12 @@ FOSSIL_TEST_GROUP(c_fson_tests) {
410352
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_large_number);
411353
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_special_char_string);
412354

413-
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_enum);
414-
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_flags);
415355
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_datetime);
416356
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_duration);
417357

418-
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_invalid_enum);
419358
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_invalid_datetime);
420359
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_parse_invalid_duration);
421360
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_complex_nested);
422-
FOSSIL_TEST_ADD(c_fson_fixture, c_test_fson_complex_flags_enum);
423361

424362
FOSSIL_TEST_REGISTER(c_fson_fixture);
425363
} // end of tests

0 commit comments

Comments
 (0)