xref: /third_party/node/deps/ada/ada_c.h (revision 1cb0ef41)
1/**
2 * @file ada_c.h
3 * @brief Includes the C definitions for Ada. This is a C file, not C++.
4 */
5#ifndef ADA_C_H
6#define ADA_C_H
7
8#include <stdbool.h>
9#include <stdint.h>
10#include <stddef.h>
11
12// This is a reference to ada::url_components::omitted
13// It represents "uint32_t(-1)"
14#define ada_url_omitted 0xffffffff
15
16// string that is owned by the ada_url instance
17typedef struct {
18  const char* data;
19  size_t length;
20} ada_string;
21
22// string that must be freed by the caller
23typedef struct {
24  const char* data;
25  size_t length;
26} ada_owned_string;
27
28typedef struct {
29  uint32_t protocol_end;
30  uint32_t username_end;
31  uint32_t host_start;
32  uint32_t host_end;
33  uint32_t port;
34  uint32_t pathname_start;
35  uint32_t search_start;
36  uint32_t hash_start;
37} ada_url_components;
38
39typedef void* ada_url;
40
41// input should be a null terminated C string (ASCII or UTF-8)
42// you must call ada_free on the returned pointer
43ada_url ada_parse(const char* input, size_t length);
44ada_url ada_parse_with_base(const char* input, size_t input_length,
45                            const char* base, size_t base_length);
46
47// input and base should be a null terminated C strings
48bool ada_can_parse(const char* input, size_t length);
49bool ada_can_parse_with_base(const char* input, size_t input_length,
50                             const char* base, size_t base_length);
51
52void ada_free(ada_url result);
53void ada_free_owned_string(ada_owned_string owned);
54ada_url ada_copy(ada_url input);
55
56bool ada_is_valid(ada_url result);
57
58// url_aggregator getters
59// if ada_is_valid(result)) is false, an empty string is returned
60ada_owned_string ada_get_origin(ada_url result);
61ada_string ada_get_href(ada_url result);
62ada_string ada_get_username(ada_url result);
63ada_string ada_get_password(ada_url result);
64ada_string ada_get_port(ada_url result);
65ada_string ada_get_hash(ada_url result);
66ada_string ada_get_host(ada_url result);
67ada_string ada_get_hostname(ada_url result);
68ada_string ada_get_pathname(ada_url result);
69ada_string ada_get_search(ada_url result);
70ada_string ada_get_protocol(ada_url result);
71uint8_t ada_get_host_type(ada_url result);
72uint8_t ada_get_scheme_type(ada_url result);
73
74// url_aggregator setters
75// if ada_is_valid(result)) is false, the setters have no effect
76// input should be a null terminated C string
77bool ada_set_href(ada_url result, const char* input, size_t length);
78bool ada_set_host(ada_url result, const char* input, size_t length);
79bool ada_set_hostname(ada_url result, const char* input, size_t length);
80bool ada_set_protocol(ada_url result, const char* input, size_t length);
81bool ada_set_username(ada_url result, const char* input, size_t length);
82bool ada_set_password(ada_url result, const char* input, size_t length);
83bool ada_set_port(ada_url result, const char* input, size_t length);
84bool ada_set_pathname(ada_url result, const char* input, size_t length);
85void ada_set_search(ada_url result, const char* input, size_t length);
86void ada_set_hash(ada_url result, const char* input, size_t length);
87
88// url_aggregator clear methods
89void ada_clear_port(ada_url result);
90void ada_clear_hash(ada_url result);
91void ada_clear_search(ada_url result);
92
93// url_aggregator functions
94// if ada_is_valid(result) is false, functions below will return false
95bool ada_has_credentials(ada_url result);
96bool ada_has_empty_hostname(ada_url result);
97bool ada_has_hostname(ada_url result);
98bool ada_has_non_empty_username(ada_url result);
99bool ada_has_non_empty_password(ada_url result);
100bool ada_has_port(ada_url result);
101bool ada_has_password(ada_url result);
102bool ada_has_hash(ada_url result);
103bool ada_has_search(ada_url result);
104
105// returns a pointer to the internal url_aggregator::url_components
106const ada_url_components* ada_get_components(ada_url result);
107
108// idna methods
109ada_owned_string ada_idna_to_unicode(const char* input, size_t length);
110ada_owned_string ada_idna_to_ascii(const char* input, size_t length);
111
112// url search params
113typedef void* ada_url_search_params;
114
115// Represents an std::vector<std::string>
116typedef void* ada_strings;
117typedef void* ada_url_search_params_keys_iter;
118typedef void* ada_url_search_params_values_iter;
119
120typedef struct {
121  ada_string key;
122  ada_string value;
123} ada_string_pair;
124
125typedef void* ada_url_search_params_entries_iter;
126
127ada_url_search_params ada_parse_search_params(const char* input, size_t length);
128void ada_free_search_params(ada_url_search_params result);
129
130size_t ada_search_params_size(ada_url_search_params result);
131void ada_search_params_sort(ada_url_search_params result);
132ada_owned_string ada_search_params_to_string(ada_url_search_params result);
133
134void ada_search_params_append(ada_url_search_params result, const char* key,
135                              size_t key_length, const char* value,
136                              size_t value_length);
137void ada_search_params_set(ada_url_search_params result, const char* key,
138                           size_t key_length, const char* value,
139                           size_t value_length);
140void ada_search_params_remove(ada_url_search_params result, const char* key,
141                              size_t key_length);
142void ada_search_params_remove_value(ada_url_search_params result,
143                                    const char* key, size_t key_length,
144                                    const char* value, size_t value_length);
145bool ada_search_params_has(ada_url_search_params result, const char* key,
146                           size_t key_length);
147bool ada_search_params_has_value(ada_url_search_params result, const char* key,
148                                 size_t key_length, const char* value,
149                                 size_t value_length);
150ada_string ada_search_params_get(ada_url_search_params result, const char* key,
151                                 size_t key_length);
152ada_strings ada_search_params_get_all(ada_url_search_params result,
153                                      const char* key, size_t key_length);
154ada_url_search_params_keys_iter ada_search_params_get_keys(
155    ada_url_search_params result);
156ada_url_search_params_values_iter ada_search_params_get_values(
157    ada_url_search_params result);
158ada_url_search_params_entries_iter ada_search_params_get_entries(
159    ada_url_search_params result);
160
161void ada_free_strings(ada_strings result);
162size_t ada_strings_size(ada_strings result);
163ada_string ada_strings_get(ada_strings result, size_t index);
164
165void ada_free_search_params_keys_iter(ada_url_search_params_keys_iter result);
166ada_string ada_search_params_keys_iter_next(
167    ada_url_search_params_keys_iter result);
168bool ada_search_params_keys_iter_has_next(
169    ada_url_search_params_keys_iter result);
170
171void ada_free_search_params_values_iter(
172    ada_url_search_params_values_iter result);
173ada_string ada_search_params_values_iter_next(
174    ada_url_search_params_values_iter result);
175bool ada_search_params_values_iter_has_next(
176    ada_url_search_params_values_iter result);
177
178void ada_free_search_params_entries_iter(
179    ada_url_search_params_entries_iter result);
180ada_string_pair ada_search_params_entries_iter_next(
181    ada_url_search_params_entries_iter result);
182bool ada_search_params_entries_iter_has_next(
183    ada_url_search_params_entries_iter result);
184
185#endif  // ADA_C_H
186