#ifndef icu4x_Script_D_HPP
#define icu4x_Script_D_HPP

#include <stdio.h>
#include <stdint.h>
#include <stddef.h>
#include <stdbool.h>
#include <memory>
#include <functional>
#include <optional>
#include "../diplomat_runtime.hpp"

namespace icu4x {
class Script;
}


namespace icu4x {
namespace capi {
    enum Script {
      Script_Adlam = 167,
      Script_Ahom = 161,
      Script_AnatolianHieroglyphs = 156,
      Script_Arabic = 2,
      Script_Armenian = 3,
      Script_Avestan = 117,
      Script_Balinese = 62,
      Script_Bamum = 130,
      Script_BassaVah = 134,
      Script_Batak = 63,
      Script_Bengali = 4,
      Script_Bhaiksuki = 168,
      Script_Bopomofo = 5,
      Script_Brahmi = 65,
      Script_Braille = 46,
      Script_Buginese = 55,
      Script_Buhid = 44,
      Script_CanadianAboriginal = 40,
      Script_Carian = 104,
      Script_CaucasianAlbanian = 159,
      Script_Chakma = 118,
      Script_Cham = 66,
      Script_Cherokee = 6,
      Script_Chorasmian = 189,
      Script_Common = 0,
      Script_Coptic = 7,
      Script_Cuneiform = 101,
      Script_Cypriot = 47,
      Script_CyproMinoan = 193,
      Script_Cyrillic = 8,
      Script_Deseret = 9,
      Script_Devanagari = 10,
      Script_DivesAkuru = 190,
      Script_Dogra = 178,
      Script_Duployan = 135,
      Script_EgyptianHieroglyphs = 71,
      Script_Elbasan = 136,
      Script_Elymaic = 185,
      Script_Ethiopian = 11,
      Script_Georgian = 12,
      Script_Glagolitic = 56,
      Script_Gothic = 13,
      Script_Grantha = 137,
      Script_Greek = 14,
      Script_Gujarati = 15,
      Script_GunjalaGondi = 179,
      Script_Gurmukhi = 16,
      Script_Han = 17,
      Script_Hangul = 18,
      Script_HanifiRohingya = 182,
      Script_Hanunoo = 43,
      Script_Hatran = 162,
      Script_Hebrew = 19,
      Script_Hiragana = 20,
      Script_ImperialAramaic = 116,
      Script_Inherited = 1,
      Script_InscriptionalPahlavi = 122,
      Script_InscriptionalParthian = 125,
      Script_Javanese = 78,
      Script_Kaithi = 120,
      Script_Kannada = 21,
      Script_Katakana = 22,
      Script_Kawi = 198,
      Script_KayahLi = 79,
      Script_Kharoshthi = 57,
      Script_KhitanSmallScript = 191,
      Script_Khmer = 23,
      Script_Khojki = 157,
      Script_Khudawadi = 145,
      Script_Lao = 24,
      Script_Latin = 25,
      Script_Lepcha = 82,
      Script_Limbu = 48,
      Script_LinearA = 83,
      Script_LinearB = 49,
      Script_Lisu = 131,
      Script_Lycian = 107,
      Script_Lydian = 108,
      Script_Mahajani = 160,
      Script_Makasar = 180,
      Script_Malayalam = 26,
      Script_Mandaic = 84,
      Script_Manichaean = 121,
      Script_Marchen = 169,
      Script_MasaramGondi = 175,
      Script_Medefaidrin = 181,
      Script_MeeteiMayek = 115,
      Script_MendeKikakui = 140,
      Script_MeroiticCursive = 141,
      Script_MeroiticHieroglyphs = 86,
      Script_Miao = 92,
      Script_Modi = 163,
      Script_Mongolian = 27,
      Script_Mro = 149,
      Script_Multani = 164,
      Script_Myanmar = 28,
      Script_Nabataean = 143,
      Script_NagMundari = 199,
      Script_Nandinagari = 187,
      Script_Nastaliq = 200,
      Script_NewTaiLue = 59,
      Script_Newa = 170,
      Script_Nko = 87,
      Script_Nushu = 150,
      Script_NyiakengPuachueHmong = 186,
      Script_Ogham = 29,
      Script_OlChiki = 109,
      Script_OldHungarian = 76,
      Script_OldItalic = 30,
      Script_OldNorthArabian = 142,
      Script_OldPermic = 89,
      Script_OldPersian = 61,
      Script_OldSogdian = 184,
      Script_OldSouthArabian = 133,
      Script_OldTurkic = 88,
      Script_OldUyghur = 194,
      Script_Oriya = 31,
      Script_Osage = 171,
      Script_Osmanya = 50,
      Script_PahawhHmong = 75,
      Script_Palmyrene = 144,
      Script_PauCinHau = 165,
      Script_PhagsPa = 90,
      Script_Phoenician = 91,
      Script_PsalterPahlavi = 123,
      Script_Rejang = 110,
      Script_Runic = 32,
      Script_Samaritan = 126,
      Script_Saurashtra = 111,
      Script_Sharada = 151,
      Script_Shavian = 51,
      Script_Siddham = 166,
      Script_SignWriting = 112,
      Script_Sinhala = 33,
      Script_Sogdian = 183,
      Script_SoraSompeng = 152,
      Script_Soyombo = 176,
      Script_Sundanese = 113,
      Script_SylotiNagri = 58,
      Script_Syriac = 34,
      Script_Tagalog = 42,
      Script_Tagbanwa = 45,
      Script_TaiLe = 52,
      Script_TaiTham = 106,
      Script_TaiViet = 127,
      Script_Takri = 153,
      Script_Tamil = 35,
      Script_Tangsa = 195,
      Script_Tangut = 154,
      Script_Telugu = 36,
      Script_Thaana = 37,
      Script_Thai = 38,
      Script_Tibetan = 39,
      Script_Tifinagh = 60,
      Script_Tirhuta = 158,
      Script_Toto = 196,
      Script_Ugaritic = 53,
      Script_Unknown = 103,
      Script_Vai = 99,
      Script_Vithkuqi = 197,
      Script_Wancho = 188,
      Script_WarangCiti = 146,
      Script_Yezidi = 192,
      Script_Yi = 41,
      Script_ZanabazarSquare = 177,
    };
    
    typedef struct Script_option {union { Script ok; }; bool is_ok; } Script_option;
} // namespace capi
} // namespace

namespace icu4x {
class Script {
public:
  enum Value {
    Adlam = 167,
    Ahom = 161,
    AnatolianHieroglyphs = 156,
    Arabic = 2,
    Armenian = 3,
    Avestan = 117,
    Balinese = 62,
    Bamum = 130,
    BassaVah = 134,
    Batak = 63,
    Bengali = 4,
    Bhaiksuki = 168,
    Bopomofo = 5,
    Brahmi = 65,
    Braille = 46,
    Buginese = 55,
    Buhid = 44,
    CanadianAboriginal = 40,
    Carian = 104,
    CaucasianAlbanian = 159,
    Chakma = 118,
    Cham = 66,
    Cherokee = 6,
    Chorasmian = 189,
    Common = 0,
    Coptic = 7,
    Cuneiform = 101,
    Cypriot = 47,
    CyproMinoan = 193,
    Cyrillic = 8,
    Deseret = 9,
    Devanagari = 10,
    DivesAkuru = 190,
    Dogra = 178,
    Duployan = 135,
    EgyptianHieroglyphs = 71,
    Elbasan = 136,
    Elymaic = 185,
    Ethiopian = 11,
    Georgian = 12,
    Glagolitic = 56,
    Gothic = 13,
    Grantha = 137,
    Greek = 14,
    Gujarati = 15,
    GunjalaGondi = 179,
    Gurmukhi = 16,
    Han = 17,
    Hangul = 18,
    HanifiRohingya = 182,
    Hanunoo = 43,
    Hatran = 162,
    Hebrew = 19,
    Hiragana = 20,
    ImperialAramaic = 116,
    Inherited = 1,
    InscriptionalPahlavi = 122,
    InscriptionalParthian = 125,
    Javanese = 78,
    Kaithi = 120,
    Kannada = 21,
    Katakana = 22,
    Kawi = 198,
    KayahLi = 79,
    Kharoshthi = 57,
    KhitanSmallScript = 191,
    Khmer = 23,
    Khojki = 157,
    Khudawadi = 145,
    Lao = 24,
    Latin = 25,
    Lepcha = 82,
    Limbu = 48,
    LinearA = 83,
    LinearB = 49,
    Lisu = 131,
    Lycian = 107,
    Lydian = 108,
    Mahajani = 160,
    Makasar = 180,
    Malayalam = 26,
    Mandaic = 84,
    Manichaean = 121,
    Marchen = 169,
    MasaramGondi = 175,
    Medefaidrin = 181,
    MeeteiMayek = 115,
    MendeKikakui = 140,
    MeroiticCursive = 141,
    MeroiticHieroglyphs = 86,
    Miao = 92,
    Modi = 163,
    Mongolian = 27,
    Mro = 149,
    Multani = 164,
    Myanmar = 28,
    Nabataean = 143,
    NagMundari = 199,
    Nandinagari = 187,
    Nastaliq = 200,
    NewTaiLue = 59,
    Newa = 170,
    Nko = 87,
    Nushu = 150,
    NyiakengPuachueHmong = 186,
    Ogham = 29,
    OlChiki = 109,
    OldHungarian = 76,
    OldItalic = 30,
    OldNorthArabian = 142,
    OldPermic = 89,
    OldPersian = 61,
    OldSogdian = 184,
    OldSouthArabian = 133,
    OldTurkic = 88,
    OldUyghur = 194,
    Oriya = 31,
    Osage = 171,
    Osmanya = 50,
    PahawhHmong = 75,
    Palmyrene = 144,
    PauCinHau = 165,
    PhagsPa = 90,
    Phoenician = 91,
    PsalterPahlavi = 123,
    Rejang = 110,
    Runic = 32,
    Samaritan = 126,
    Saurashtra = 111,
    Sharada = 151,
    Shavian = 51,
    Siddham = 166,
    SignWriting = 112,
    Sinhala = 33,
    Sogdian = 183,
    SoraSompeng = 152,
    Soyombo = 176,
    Sundanese = 113,
    SylotiNagri = 58,
    Syriac = 34,
    Tagalog = 42,
    Tagbanwa = 45,
    TaiLe = 52,
    TaiTham = 106,
    TaiViet = 127,
    Takri = 153,
    Tamil = 35,
    Tangsa = 195,
    Tangut = 154,
    Telugu = 36,
    Thaana = 37,
    Thai = 38,
    Tibetan = 39,
    Tifinagh = 60,
    Tirhuta = 158,
    Toto = 196,
    Ugaritic = 53,
    Unknown = 103,
    Vai = 99,
    Vithkuqi = 197,
    Wancho = 188,
    WarangCiti = 146,
    Yezidi = 192,
    Yi = 41,
    ZanabazarSquare = 177,
  };

  Script() = default;
  // Implicit conversions between enum and ::Value
  constexpr Script(Value v) : value(v) {}
  constexpr operator Value() const { return value; }
  // Prevent usage as boolean value
  explicit operator bool() const = delete;

  inline static icu4x::Script for_char(char32_t ch);

  inline std::optional<std::string_view> long_name();

  inline std::optional<std::string_view> short_name();

  inline uint16_t to_integer_value();

  inline static std::optional<icu4x::Script> from_integer_value(uint16_t other);

  inline icu4x::capi::Script AsFFI() const;
  inline static icu4x::Script FromFFI(icu4x::capi::Script c_enum);
private:
    Value value;
};

} // namespace
#endif // icu4x_Script_D_HPP
