master
c 89 lines 2.92 KB
Raw
1 // SPDX-License-Identifier: GPL-3.0-or-later
2
3 #include "datasource_formats.h"
4
5 static struct {
6 const char *name;
7 uint32_t hash;
8 DATASOURCE_FORMAT value;
9 } google_data_formats[] = {
10 // this is not an error - when Google requests json, it expects javascript
11 // https://developers.google.com/chart/interactive/docs/dev/implementing_data_source#responseformat
12 {"json", 0, DATASOURCE_DATATABLE_JSONP}
13 , {"html", 0, DATASOURCE_HTML}
14 , {"csv", 0, DATASOURCE_CSV}
15 , {"tsv-excel", 0, DATASOURCE_TSV}
16
17 // terminator
18 , {NULL, 0, 0}
19 };
20
21 inline DATASOURCE_FORMAT google_data_format_str_to_id(const char *name) {
22 uint32_t hash = simple_hash(name);
23 int i;
24
25 for(i = 0; google_data_formats[i].name ; i++) {
26 if (unlikely(hash == google_data_formats[i].hash && !strcmp(name, google_data_formats[i].name))) {
27 return google_data_formats[i].value;
28 }
29 }
30
31 return DATASOURCE_JSON;
32 }
33
34 // --------------------------------------------------------------------------------------------------------------------
35
36 static struct {
37 const char *name;
38 uint32_t hash;
39 DATASOURCE_FORMAT value;
40 } datasource_formats[] = {
41 { "datatable" , 0 , DATASOURCE_DATATABLE_JSON}
42 , {"datasource" , 0 , DATASOURCE_DATATABLE_JSONP}
43 , {"json" , 0 , DATASOURCE_JSON}
44 , {"json2" , 0 , DATASOURCE_JSON2}
45 , {"jsonp" , 0 , DATASOURCE_JSONP}
46 , {"ssv" , 0 , DATASOURCE_SSV}
47 , {"csv" , 0 , DATASOURCE_CSV}
48 , {"tsv" , 0 , DATASOURCE_TSV}
49 , {"tsv-excel" , 0 , DATASOURCE_TSV}
50 , {"html" , 0 , DATASOURCE_HTML}
51 , {"array" , 0 , DATASOURCE_JS_ARRAY}
52 , {"ssvcomma" , 0 , DATASOURCE_SSV_COMMA}
53 , {"csvjsonarray" , 0 , DATASOURCE_CSV_JSON_ARRAY}
54 , {"markdown" , 0 , DATASOURCE_CSV_MARKDOWN}
55
56 // terminator
57 , {NULL, 0, 0}
58 };
59
60 DATASOURCE_FORMAT datasource_format_str_to_id(const char *name) {
61 uint32_t hash = simple_hash(name);
62 int i;
63
64 for(i = 0; datasource_formats[i].name ; i++) {
65 if (unlikely(hash == datasource_formats[i].hash && !strcmp(name, datasource_formats[i].name))) {
66 return datasource_formats[i].value;
67 }
68 }
69
70 return DATASOURCE_JSON;
71 }
72
73 const char *rrdr_format_to_string(DATASOURCE_FORMAT format) {
74 for(size_t i = 0; datasource_formats[i].name ;i++)
75 if(unlikely(datasource_formats[i].value == format))
76 return datasource_formats[i].name;
77
78 return "unknown";
79 }
80
81 // --------------------------------------------------------------------------------------------------------------------
82
83 void datasource_formats_init(void) {
84 for(size_t i = 0; datasource_formats[i].name ; i++)
85 datasource_formats[i].hash = simple_hash(datasource_formats[i].name);
86
87 for(size_t i = 0; google_data_formats[i].name ; i++)
88 google_data_formats[i].hash = simple_hash(google_data_formats[i].name);
89 }