Mercurial > paster
annotate json-util.h @ 78:9bfe5ce3cc45
pasterd: rework themes
author | David Demelier <markand@malikania.fr> |
---|---|
date | Thu, 16 Mar 2023 20:45:59 +0100 |
parents | fe78b16c694d |
children |
rev | line source |
---|---|
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
1 /* |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
2 * json-util.h -- utilities for JSON |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
3 * |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
4 * Copyright (c) 2020-2023 David Demelier <markand@malikania.fr> |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
5 * |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
6 * Permission to use, copy, modify, and/or distribute this software for any |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
7 * purpose with or without fee is hereby granted, provided that the above |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
8 * copyright notice and this permission notice appear in all copies. |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
9 * |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
10 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
11 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
12 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
13 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
14 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
15 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
16 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
17 */ |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
18 |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
19 #ifndef PASTER_PASTER_JSON_UTIL_H |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
20 #define PASTER_PASTER_JSON_UTIL_H |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
21 |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
22 #include <stdint.h> |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
23 #include <time.h> |
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
24 |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
25 #include <jansson.h> |
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
26 |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
27 /** |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
28 * Create an array of all possible languages supported by the application. If |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
29 * the selected argument is not null it will also add a JSON property selected |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
30 * (mostly used when rendering an existing paste). |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
31 * |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
32 * Example of generated schema: |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
33 * |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
34 * ```javascript |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
35 * [ |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
36 * { |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
37 * "name": "nohighlight" |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
38 * } |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
39 * { |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
40 * "name": "c", |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
41 * "selected": "selected" |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
42 * } |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
43 * { |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
44 * "name": "cpp" |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
45 * } |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
46 * ] |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
47 * ``` |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
48 * |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
49 * \param selected the current selected language (or NULL if none) |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
50 * \return a JSON array of objects |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
51 */ |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
52 json_t * |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
53 ju_languages(const char *selected); |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
54 |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
55 /** |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
56 * Create a list of duration in the form: |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
57 * |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
58 * ```javascript |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
59 * [ |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
60 * { |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
61 * "value": "day" |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
62 * } |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
63 * { |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
64 * "value": "hour" |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
65 * } |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
66 * ] |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
67 * ``` |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
68 * |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
69 * \return a JSON array of objects |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
70 */ |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
71 json_t * |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
72 ju_durations(void); |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
73 |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
74 /** |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
75 * Create a convenient ISO date string containing the paste creation date. |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
76 * |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
77 * \param timestamp the timestamp |
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
78 * \return a string with an ISO date |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
79 */ |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
80 json_t * |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
81 ju_date(time_t timestamp); |
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
82 |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
83 /** |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
84 * Create a convenient remaining time for the given timestamp/duration. |
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
85 * |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
86 * Returns strings in the form: |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
87 * |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
88 * - `2 day(s)` |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
89 * - `3 hours(s)` |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
90 * |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
91 * \param timestamp the timestamp |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
92 * \param duration the duration in seconds (e.g. 3600) |
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
93 * \return a string containing the expiration time |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
94 */ |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
95 json_t * |
78
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
96 ju_expires(time_t timestamp, int duration); |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
97 |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
98 const char * |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
99 ju_get_string(const json_t *, const char *); |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
100 |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
101 intmax_t |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
102 ju_get_int(const json_t *, const char *); |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
103 |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
104 int |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
105 ju_get_bool(const json_t *, const char *); |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
106 |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
107 json_t * |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
108 ju_paste_new(void); |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
109 |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
110 json_t * |
9bfe5ce3cc45
pasterd: rework themes
David Demelier <markand@malikania.fr>
parents:
77
diff
changeset
|
111 ju_extend(json_t *doc, const char *fmt, ...); |
77
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
112 |
fe78b16c694d
pasterd: refactor json utilities
David Demelier <markand@malikania.fr>
parents:
diff
changeset
|
113 #endif /* !PASTER_PASTER_JSON_UTIL_H */ |