Skip to content

Commit 5229e51

Browse files
committed
Finish the library implementation
1 parent 550780e commit 5229e51

File tree

4 files changed

+262
-111
lines changed

4 files changed

+262
-111
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
example: example.c jim.h
2-
cc -Wall -Wextra -Wno-unused-parameter -std=c99 -pedantic -o example example.c
2+
cc -Wall -Wextra -Wswitch-enum -std=c99 -pedantic -o example example.c

README.md

Lines changed: 91 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,94 @@
11
# JIM
22

33
Immediate Mode JSON Serialization Library in C
4+
5+
## Example
6+
7+
[`example.c`](./example.c):
8+
9+
```c
10+
#include <stdio.h>
11+
12+
#define JIM_IMPLEMENTATION
13+
#include "./jim.h"
14+
15+
int main()
16+
{
17+
Jim jim = {
18+
.sink = stdout,
19+
.write = (Jim_Write) fwrite,
20+
};
21+
22+
jim_object_begin(&jim);
23+
jim_member_key(&jim, "null", NULL);
24+
jim_null(&jim);
25+
26+
jim_member_key(&jim, "bool", NULL);
27+
jim_array_begin(&jim);
28+
jim_bool(&jim, 0);
29+
jim_bool(&jim, 1);
30+
jim_array_end(&jim);
31+
32+
jim_member_key(&jim, "integers", NULL);
33+
jim_array_begin(&jim);
34+
for (int i = -3; i <= 3; ++i) {
35+
jim_integer(&jim, i);
36+
}
37+
jim_array_end(&jim);
38+
39+
jim_member_key(&jim, "floats", NULL);
40+
jim_array_begin(&jim);
41+
jim_float(&jim, 3.1415, 4);
42+
jim_float(&jim, 2.71828, 5);
43+
jim_float(&jim, 1.6180, 4);
44+
jim_array_end(&jim);
45+
46+
jim_member_key(&jim, "string", NULL);
47+
jim_array_begin(&jim);
48+
jim_string(&jim, "Hello\tWorld\n", NULL);
49+
unsigned int size = 4;
50+
jim_string(&jim, "\0\0\0\0", &size);
51+
jim_array_end(&jim);
52+
jim_object_end(&jim);
53+
54+
if (jim.error != JIM_OK) {
55+
fprintf(stderr, "ERROR: could not serialize json properly: %s\n",
56+
jim_error_string(jim.error));
57+
return -1;
58+
}
59+
60+
return 0;
61+
}
62+
```
63+
64+
### Output
65+
66+
```console
67+
$ cc -o example example.c
68+
$ ./example | jq .
69+
{
70+
"null": null,
71+
"bool": [
72+
false,
73+
true
74+
],
75+
"integers": [
76+
-3,
77+
-2,
78+
-1,
79+
0,
80+
1,
81+
2,
82+
3
83+
],
84+
"floats": [
85+
3.1415,
86+
2.71828,
87+
1.618
88+
],
89+
"string": [
90+
"Hello\tWorld\n",
91+
"\u0000\u0000\u0000\u0000"
92+
]
93+
}
94+
```

example.c

Lines changed: 32 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -7,50 +7,44 @@ int main()
77
{
88
Jim jim = {
99
.sink = stdout,
10-
.write = fwrite,
10+
.write = (Jim_Write) fwrite,
1111
};
1212

13-
jim_begin(&jim);
13+
jim_object_begin(&jim);
14+
jim_member_key(&jim, "null", NULL);
15+
jim_null(&jim);
16+
17+
jim_member_key(&jim, "bool", NULL);
18+
jim_array_begin(&jim);
19+
jim_bool(&jim, 0);
20+
jim_bool(&jim, 1);
21+
jim_array_end(&jim);
22+
23+
jim_member_key(&jim, "integers", NULL);
24+
jim_array_begin(&jim);
25+
for (int i = -3; i <= 3; ++i) {
26+
jim_integer(&jim, i);
27+
}
28+
jim_array_end(&jim);
29+
30+
jim_member_key(&jim, "floats", NULL);
31+
jim_array_begin(&jim);
32+
jim_float(&jim, 3.1415, 4);
33+
jim_float(&jim, 2.71828, 5);
34+
jim_float(&jim, 1.6180, 4);
35+
jim_array_end(&jim);
36+
37+
jim_member_key(&jim, "string", NULL);
1438
jim_array_begin(&jim);
15-
jim_element_begin(&jim);
16-
jim_array_begin(&jim);
17-
jim_element_begin(&jim);
18-
jim_null(&jim);
19-
jim_element_end(&jim);
20-
for (int i = 0; i < 5; ++i) {
21-
jim_element_begin(&jim);
22-
jim_bool(&jim, i);
23-
jim_element_end(&jim);
24-
}
25-
jim_array_end(&jim);
26-
jim_element_end(&jim);
27-
28-
jim_element_begin(&jim);
29-
jim_bool(&jim, 0);
30-
jim_element_end(&jim);
31-
32-
jim_element_begin(&jim);
33-
jim_bool(&jim, 1);
34-
jim_element_end(&jim);
35-
36-
jim_element_begin(&jim);
37-
size_t size = 5;
38-
jim_string(&jim, "\0\0\0\0\0", &size);
39-
jim_element_end(&jim);
40-
41-
jim_element_begin(&jim);
42-
jim_object_begin(&jim);
43-
jim_member_begin(&jim);
44-
jim_member_key(&jim, "hello", NULL);
45-
jim_bool(&jim, 0);
46-
jim_member_end(&jim);
47-
jim_object_end(&jim);
48-
jim_element_end(&jim);
39+
jim_string(&jim, "Hello\tWorld\n", NULL);
40+
unsigned int size = 4;
41+
jim_string(&jim, "\0\0\0\0", &size);
4942
jim_array_end(&jim);
50-
jim_end(&jim);
43+
jim_object_end(&jim);
5144

5245
if (jim.error != JIM_OK) {
53-
fprintf(stderr, "ERROR: could not serialize json properly: %s\n", jim_error_string(jim.error));
46+
fprintf(stderr, "ERROR: could not serialize json properly: %s\n",
47+
jim_error_string(jim.error));
5448
return -1;
5549
}
5650

0 commit comments

Comments
 (0)