#ifndef SWIFT_UNICODE_UNICODE_H
#define SWIFT_UNICODE_UNICODE_H

#include <swift/stdlib.h>

#include <swift/unicode/api.h>

#define SWIFT_ASCII_UNKNOWN '?'
#define SWIFT_UNICODE_UNKNOWN 0xFFFD

typedef struct swift_unicode_ret_t swift_unicode_ret_t;

struct swift_unicode_ret_t {
	size_t size;
	uint32_t code;
	bool success;
};

#define SWIFT_UNICODE_RET(...) ((swift_unicode_ret_t){__VA_ARGS__})

typedef uint32_t swift_uchar_t;

typedef size_t (* swift_enc_uchar_fn_t)(void *dst, swift_uchar_t code);
typedef swift_unicode_ret_t (* swift_dec_uchar_fn_t)(const void *src,
	size_t src_size);

SWIFT_UNICODE_API bool swift_init_unicode(void);
SWIFT_UNICODE_API void swift_term_unicode(void);

#endif /* SWIFT_UNICODE_UNICODE_H */
