ICU4X
International Components for Unicode
Loading...
Searching...
No Matches
ICU4XLocale.hpp
Go to the documentation of this file.
1#ifndef ICU4XLocale_HPP
2#define ICU4XLocale_HPP
3#include <stdint.h>
4#include <stddef.h>
5#include <stdbool.h>
6#include <algorithm>
7#include <memory>
8#include <variant>
9#include <optional>
10#include "diplomat_runtime.hpp"
11
12#include "ICU4XLocale.h"
13
14class ICU4XLocale;
15#include "ICU4XError.hpp"
16#include "ICU4XOrdering.hpp"
17
21struct ICU4XLocaleDeleter {
22 void operator()(capi::ICU4XLocale* l) const noexcept {
23 capi::ICU4XLocale_destroy(l);
24 }
25};
26
33 public:
34
44 static diplomat::result<ICU4XLocale, ICU4XError> create_from_string(const std::string_view name);
45
51 static ICU4XLocale create_und();
52
58 ICU4XLocale clone() const;
59
67
75
81 template<typename W> diplomat::result<std::monostate, ICU4XError> get_unicode_extension_to_writeable(const std::string_view bytes, W& write) const;
82
88 diplomat::result<std::string, ICU4XError> get_unicode_extension(const std::string_view bytes) const;
89
96
103
110
116 template<typename W> diplomat::result<std::monostate, ICU4XError> region_to_writeable(W& write) const;
117
124
130 diplomat::result<std::monostate, ICU4XError> set_region(const std::string_view bytes);
131
137 template<typename W> diplomat::result<std::monostate, ICU4XError> script_to_writeable(W& write) const;
138
145
151 diplomat::result<std::monostate, ICU4XError> set_script(const std::string_view bytes);
152
160 template<typename W> static diplomat::result<std::monostate, ICU4XError> canonicalize_to_writeable(const std::string_view bytes, W& write);
161
169 static diplomat::result<std::string, ICU4XError> canonicalize(const std::string_view bytes);
170
176 template<typename W> diplomat::result<std::monostate, ICU4XError> to_string_to_writeable(W& write) const;
177
184
188 bool normalizing_eq(const std::string_view other) const;
189
193 ICU4XOrdering strict_cmp(const std::string_view other) const;
194
198 ICU4XOrdering total_cmp(const ICU4XLocale& other) const;
199
205 static ICU4XLocale create_en();
206
212 static ICU4XLocale create_bn();
213 inline const capi::ICU4XLocale* AsFFI() const { return this->inner.get(); }
214 inline capi::ICU4XLocale* AsFFIMut() { return this->inner.get(); }
215 inline explicit ICU4XLocale(capi::ICU4XLocale* i) : inner(i) {}
216 ICU4XLocale() = default;
217 ICU4XLocale(ICU4XLocale&&) noexcept = default;
218 ICU4XLocale& operator=(ICU4XLocale&& other) noexcept = default;
219 private:
220 std::unique_ptr<capi::ICU4XLocale, ICU4XLocaleDeleter> inner;
221};
222
223
224inline diplomat::result<ICU4XLocale, ICU4XError> ICU4XLocale::create_from_string(const std::string_view name) {
225 auto diplomat_result_raw_out_value = capi::ICU4XLocale_create_from_string(name.data(), name.size());
226 diplomat::result<ICU4XLocale, ICU4XError> diplomat_result_out_value;
227 if (diplomat_result_raw_out_value.is_ok) {
228 diplomat_result_out_value = diplomat::Ok<ICU4XLocale>(ICU4XLocale(diplomat_result_raw_out_value.ok));
229 } else {
230 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
231 }
232 return diplomat_result_out_value;
233}
235 return ICU4XLocale(capi::ICU4XLocale_create_und());
236}
238 return ICU4XLocale(capi::ICU4XLocale_clone(this->inner.get()));
239}
241 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
242 auto diplomat_result_raw_out_value = capi::ICU4XLocale_basename(this->inner.get(), &write_writer);
243 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
244 if (diplomat_result_raw_out_value.is_ok) {
245 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
246 } else {
247 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
248 }
249 return diplomat_result_out_value;
250}
252 std::string diplomat_writeable_string;
253 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
254 auto diplomat_result_raw_out_value = capi::ICU4XLocale_basename(this->inner.get(), &diplomat_writeable_out);
255 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
256 if (diplomat_result_raw_out_value.is_ok) {
257 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
258 } else {
259 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
260 }
261 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
262}
263template<typename W> inline diplomat::result<std::monostate, ICU4XError> ICU4XLocale::get_unicode_extension_to_writeable(const std::string_view bytes, W& write) const {
264 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
265 auto diplomat_result_raw_out_value = capi::ICU4XLocale_get_unicode_extension(this->inner.get(), bytes.data(), bytes.size(), &write_writer);
266 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
267 if (diplomat_result_raw_out_value.is_ok) {
268 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
269 } else {
270 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
271 }
272 return diplomat_result_out_value;
273}
275 std::string diplomat_writeable_string;
276 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
277 auto diplomat_result_raw_out_value = capi::ICU4XLocale_get_unicode_extension(this->inner.get(), bytes.data(), bytes.size(), &diplomat_writeable_out);
278 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
279 if (diplomat_result_raw_out_value.is_ok) {
280 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
281 } else {
282 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
283 }
284 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
285}
287 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
288 auto diplomat_result_raw_out_value = capi::ICU4XLocale_language(this->inner.get(), &write_writer);
289 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
290 if (diplomat_result_raw_out_value.is_ok) {
291 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
292 } else {
293 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
294 }
295 return diplomat_result_out_value;
296}
298 std::string diplomat_writeable_string;
299 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
300 auto diplomat_result_raw_out_value = capi::ICU4XLocale_language(this->inner.get(), &diplomat_writeable_out);
301 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
302 if (diplomat_result_raw_out_value.is_ok) {
303 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
304 } else {
305 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
306 }
307 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
308}
310 auto diplomat_result_raw_out_value = capi::ICU4XLocale_set_language(this->inner.get(), bytes.data(), bytes.size());
311 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
312 if (diplomat_result_raw_out_value.is_ok) {
313 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
314 } else {
315 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
316 }
317 return diplomat_result_out_value;
318}
320 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
321 auto diplomat_result_raw_out_value = capi::ICU4XLocale_region(this->inner.get(), &write_writer);
322 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
323 if (diplomat_result_raw_out_value.is_ok) {
324 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
325 } else {
326 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
327 }
328 return diplomat_result_out_value;
329}
331 std::string diplomat_writeable_string;
332 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
333 auto diplomat_result_raw_out_value = capi::ICU4XLocale_region(this->inner.get(), &diplomat_writeable_out);
334 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
335 if (diplomat_result_raw_out_value.is_ok) {
336 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
337 } else {
338 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
339 }
340 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
341}
343 auto diplomat_result_raw_out_value = capi::ICU4XLocale_set_region(this->inner.get(), bytes.data(), bytes.size());
344 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
345 if (diplomat_result_raw_out_value.is_ok) {
346 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
347 } else {
348 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
349 }
350 return diplomat_result_out_value;
351}
353 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
354 auto diplomat_result_raw_out_value = capi::ICU4XLocale_script(this->inner.get(), &write_writer);
355 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
356 if (diplomat_result_raw_out_value.is_ok) {
357 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
358 } else {
359 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
360 }
361 return diplomat_result_out_value;
362}
364 std::string diplomat_writeable_string;
365 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
366 auto diplomat_result_raw_out_value = capi::ICU4XLocale_script(this->inner.get(), &diplomat_writeable_out);
367 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
368 if (diplomat_result_raw_out_value.is_ok) {
369 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
370 } else {
371 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
372 }
373 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
374}
376 auto diplomat_result_raw_out_value = capi::ICU4XLocale_set_script(this->inner.get(), bytes.data(), bytes.size());
377 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
378 if (diplomat_result_raw_out_value.is_ok) {
379 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
380 } else {
381 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
382 }
383 return diplomat_result_out_value;
384}
385template<typename W> inline diplomat::result<std::monostate, ICU4XError> ICU4XLocale::canonicalize_to_writeable(const std::string_view bytes, W& write) {
386 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
387 auto diplomat_result_raw_out_value = capi::ICU4XLocale_canonicalize(bytes.data(), bytes.size(), &write_writer);
388 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
389 if (diplomat_result_raw_out_value.is_ok) {
390 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
391 } else {
392 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
393 }
394 return diplomat_result_out_value;
395}
397 std::string diplomat_writeable_string;
398 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
399 auto diplomat_result_raw_out_value = capi::ICU4XLocale_canonicalize(bytes.data(), bytes.size(), &diplomat_writeable_out);
400 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
401 if (diplomat_result_raw_out_value.is_ok) {
402 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
403 } else {
404 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
405 }
406 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
407}
409 capi::DiplomatWriteable write_writer = diplomat::WriteableTrait<W>::Construct(write);
410 auto diplomat_result_raw_out_value = capi::ICU4XLocale_to_string(this->inner.get(), &write_writer);
411 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
412 if (diplomat_result_raw_out_value.is_ok) {
413 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
414 } else {
415 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
416 }
417 return diplomat_result_out_value;
418}
420 std::string diplomat_writeable_string;
421 capi::DiplomatWriteable diplomat_writeable_out = diplomat::WriteableFromString(diplomat_writeable_string);
422 auto diplomat_result_raw_out_value = capi::ICU4XLocale_to_string(this->inner.get(), &diplomat_writeable_out);
423 diplomat::result<std::monostate, ICU4XError> diplomat_result_out_value;
424 if (diplomat_result_raw_out_value.is_ok) {
425 diplomat_result_out_value = diplomat::Ok<std::monostate>(std::monostate());
426 } else {
427 diplomat_result_out_value = diplomat::Err<ICU4XError>(static_cast<ICU4XError>(diplomat_result_raw_out_value.err));
428 }
429 return diplomat_result_out_value.replace_ok(std::move(diplomat_writeable_string));
430}
431inline bool ICU4XLocale::normalizing_eq(const std::string_view other) const {
432 return capi::ICU4XLocale_normalizing_eq(this->inner.get(), other.data(), other.size());
433}
434inline ICU4XOrdering ICU4XLocale::strict_cmp(const std::string_view other) const {
435 return static_cast<ICU4XOrdering>(capi::ICU4XLocale_strict_cmp(this->inner.get(), other.data(), other.size()));
436}
438 return static_cast<ICU4XOrdering>(capi::ICU4XLocale_total_cmp(this->inner.get(), other.AsFFI()));
439}
441 return ICU4XLocale(capi::ICU4XLocale_create_en());
442}
444 return ICU4XLocale(capi::ICU4XLocale_create_bn());
445}
446#endif
ICU4XError
Definition ICU4XError.hpp:23
ICU4XOrdering
Definition ICU4XOrdering.hpp:19
Definition ICU4XLocale.hpp:32
diplomat::result< std::monostate, ICU4XError > basename_to_writeable(W &write) const
Definition ICU4XLocale.hpp:240
static ICU4XLocale create_bn()
Definition ICU4XLocale.hpp:443
diplomat::result< std::monostate, ICU4XError > region_to_writeable(W &write) const
Definition ICU4XLocale.hpp:319
bool normalizing_eq(const std::string_view other) const
Definition ICU4XLocale.hpp:431
ICU4XLocale(ICU4XLocale &&) noexcept=default
diplomat::result< std::monostate, ICU4XError > get_unicode_extension_to_writeable(const std::string_view bytes, W &write) const
Definition ICU4XLocale.hpp:263
diplomat::result< std::monostate, ICU4XError > set_region(const std::string_view bytes)
Definition ICU4XLocale.hpp:342
static ICU4XLocale create_en()
Definition ICU4XLocale.hpp:440
diplomat::result< std::monostate, ICU4XError > to_string_to_writeable(W &write) const
Definition ICU4XLocale.hpp:408
static diplomat::result< std::string, ICU4XError > canonicalize(const std::string_view bytes)
Definition ICU4XLocale.hpp:396
diplomat::result< std::monostate, ICU4XError > script_to_writeable(W &write) const
Definition ICU4XLocale.hpp:352
ICU4XOrdering strict_cmp(const std::string_view other) const
Definition ICU4XLocale.hpp:434
ICU4XOrdering total_cmp(const ICU4XLocale &other) const
Definition ICU4XLocale.hpp:437
diplomat::result< std::monostate, ICU4XError > language_to_writeable(W &write) const
Definition ICU4XLocale.hpp:286
static diplomat::result< ICU4XLocale, ICU4XError > create_from_string(const std::string_view name)
Definition ICU4XLocale.hpp:224
ICU4XLocale clone() const
Definition ICU4XLocale.hpp:237
diplomat::result< std::string, ICU4XError > to_string() const
Definition ICU4XLocale.hpp:419
diplomat::result< std::monostate, ICU4XError > set_script(const std::string_view bytes)
Definition ICU4XLocale.hpp:375
static ICU4XLocale create_und()
Definition ICU4XLocale.hpp:234
diplomat::result< std::string, ICU4XError > region() const
Definition ICU4XLocale.hpp:330
static diplomat::result< std::monostate, ICU4XError > canonicalize_to_writeable(const std::string_view bytes, W &write)
Definition ICU4XLocale.hpp:385
ICU4XLocale(capi::ICU4XLocale *i)
Definition ICU4XLocale.hpp:215
ICU4XLocale()=default
diplomat::result< std::monostate, ICU4XError > set_language(const std::string_view bytes)
Definition ICU4XLocale.hpp:309
diplomat::result< std::string, ICU4XError > basename() const
Definition ICU4XLocale.hpp:251
diplomat::result< std::string, ICU4XError > language() const
Definition ICU4XLocale.hpp:297
diplomat::result< std::string, ICU4XError > get_unicode_extension(const std::string_view bytes) const
Definition ICU4XLocale.hpp:274
diplomat::result< std::string, ICU4XError > script() const
Definition ICU4XLocale.hpp:363
Definition diplomat_runtime.hpp:84
result< T2, E > replace_ok(T2 &&t)
Definition diplomat_runtime.hpp:125
Definition diplomat_runtime.hpp:16
capi::DiplomatWriteable WriteableFromString(std::string &string)
Definition diplomat_runtime.hpp:31
Definition diplomat_runtime.hpp:69
Definition diplomat_runtime.hpp:55