0 | module IotaTime.Locale.Unix.Platform
6 | %foreign "C:iotatime_unix_locale_snapshot, libiotatime_unix"
7 | prim__unixLocaleSnapshot : String -> PrimIO AnyPtr
9 | %foreign "C:iotatime_unix_locale_item, libiotatime_unix"
10 | prim__unixLocaleItem : AnyPtr -> Int -> String
12 | %foreign "C:iotatime_unix_locale_free, libiotatime_unix"
13 | prim__unixLocaleFree : AnyPtr -> PrimIO ()
16 | record UnixLocaleData where
17 | constructor MkUnixLocaleData
18 | unixMonthNames : Vect 12 String
19 | unixMonthNamesShort : Vect 12 String
20 | unixDayNames : Vect 7 String
21 | unixDayNamesShort : Vect 7 String
24 | unixRawDateFormat : String
25 | unixRawTimeFormat : String
26 | unixRawDateTimeFormat : String
29 | localeMonthNames : UnixLocaleData -> Vect 12 String
30 | localeMonthNames = unixMonthNames
33 | localeMonthNamesShort : UnixLocaleData -> Vect 12 String
34 | localeMonthNamesShort = unixMonthNamesShort
37 | localeDayNames : UnixLocaleData -> Vect 7 String
38 | localeDayNames = unixDayNames
41 | localeDayNamesShort : UnixLocaleData -> Vect 7 String
42 | localeDayNamesShort = unixDayNamesShort
45 | localeAmName : UnixLocaleData -> String
46 | localeAmName = unixAmName
49 | localePmName : UnixLocaleData -> String
50 | localePmName = unixPmName
53 | localeDateFormat : UnixLocaleData -> String
54 | localeDateFormat = unixRawDateFormat
57 | localeTimeFormat : UnixLocaleData -> String
58 | localeTimeFormat = unixRawTimeFormat
61 | localeDateTimeFormat : UnixLocaleData -> String
62 | localeDateTimeFormat = unixRawDateTimeFormat
64 | items : (count : Nat) -> Int -> AnyPtr -> Vect count String
65 | items Z offset pointer = []
66 | items (S count) offset pointer =
67 | prim__unixLocaleItem pointer offset :: items count (offset + 1) pointer
70 | loadUnixLocaleData : String -> IO (Maybe UnixLocaleData)
71 | loadUnixLocaleData name = do
72 | pointer <- primIO (prim__unixLocaleSnapshot name)
73 | if prim__nullAnyPtr pointer /= 0
76 | let value = MkUnixLocaleData
77 | (items 12 0 pointer)
78 | (items 12 12 pointer)
79 | (items 7 24 pointer)
80 | (items 7 31 pointer)
81 | (prim__unixLocaleItem pointer 38)
82 | (prim__unixLocaleItem pointer 39)
83 | (prim__unixLocaleItem pointer 40)
84 | (prim__unixLocaleItem pointer 41)
85 | (prim__unixLocaleItem pointer 42)
86 | primIO (prim__unixLocaleFree pointer)