0 | module IotaTime.TimeZone
2 | import public IotaTime.TimeZone.Core
3 | import public IotaTime.TimeZone.Error
4 | import public IotaTime.Tzdb.Metadata
5 | import IotaTime.Tzdb.Provider
11 | record TimeZoneProviderRep where
12 | constructor MkTimeZoneProviderRep
13 | providerRepresentation : IotaTime.Tzdb.Provider.TimeZoneProviderRep
17 | TimeZoneProvider : Type
18 | TimeZoneProvider = IotaTime.TimeZone.TimeZoneProviderRep
22 | timeZoneProvider : IO (Either TzdbError TimeZone) ->
23 | (String -> IO (Either TzdbError TimeZone)) ->
24 | IO (Either TzdbError TimeZone) ->
25 | IO (Either TzdbError (List String)) ->
26 | IO (Either TzdbError TzdbMetadata) ->
28 | timeZoneProvider utcAction zoneAction localAction availableAction metadataAction =
29 | MkTimeZoneProviderRep $
IotaTime.Tzdb.Provider.timeZoneProvider
30 | utcAction zoneAction localAction availableAction metadataAction
33 | record TimeZoneCachePolicyRep where
34 | constructor MkTimeZoneCachePolicyRep
35 | cachePolicyRepresentation : IotaTime.Tzdb.Provider.TimeZoneCachePolicyRep
39 | TimeZoneCachePolicy : Type
40 | TimeZoneCachePolicy = IotaTime.TimeZone.TimeZoneCachePolicyRep
44 | timeZoneCachePolicy : (cacheNamedZones : Bool) ->
45 | (cacheAvailableZones : Bool) ->
46 | (cacheMetadata : Bool) ->
47 | (cacheLocalZone : Bool) ->
49 | timeZoneCachePolicy named available valueMetadata local =
50 | MkTimeZoneCachePolicyRep $
IotaTime.Tzdb.Provider.timeZoneCachePolicy
51 | named available valueMetadata local
55 | defaultTimeZoneCachePolicy : TimeZoneCachePolicy
56 | defaultTimeZoneCachePolicy =
57 | MkTimeZoneCachePolicyRep IotaTime.Tzdb.Provider.defaultTimeZoneCachePolicy
61 | cachedTimeZoneProvider : TimeZoneCachePolicy -> TimeZoneProvider ->
63 | cachedTimeZoneProvider (MkTimeZoneCachePolicyRep policy)
64 | (MkTimeZoneProviderRep provider) =
65 | MkTimeZoneProviderRep <$>
66 | IotaTime.Tzdb.Provider.cachedTimeZoneProvider policy provider
70 | unixTimeZoneProvider : TimeZoneProvider
71 | unixTimeZoneProvider = MkTimeZoneProviderRep IotaTime.Tzdb.unixTimeZoneProvider
75 | systemTimeZoneProvider : TimeZoneProvider
76 | systemTimeZoneProvider =
77 | MkTimeZoneProviderRep IotaTime.Tzdb.systemTimeZoneProvider
81 | windowsSnapshotTimeZoneProvider : IO (Either TzdbError TimeZoneProvider)
82 | windowsSnapshotTimeZoneProvider = do
83 | provider <- IotaTime.Tzdb.windowsSnapshotTimeZoneProvider
84 | pure (MkTimeZoneProviderRep <$> provider)
88 | utcWith : TimeZoneProvider -> IO (Either TzdbError TimeZone)
89 | utcWith (MkTimeZoneProviderRep provider) = IotaTime.Tzdb.utcWith provider
93 | timeZoneWith : TimeZoneProvider -> String -> IO (Either TzdbError TimeZone)
94 | timeZoneWith (MkTimeZoneProviderRep provider) = IotaTime.Tzdb.timeZoneWith provider
98 | localZoneWith : TimeZoneProvider -> IO (Either TzdbError TimeZone)
99 | localZoneWith (MkTimeZoneProviderRep provider) = IotaTime.Tzdb.localZoneWith provider
103 | availableZonesWith : TimeZoneProvider ->
104 | IO (Either TzdbError (List String))
105 | availableZonesWith (MkTimeZoneProviderRep provider) =
106 | IotaTime.Tzdb.availableZonesWith provider
110 | metadataWith : TimeZoneProvider -> IO (Either TzdbError TzdbMetadata)
111 | metadataWith (MkTimeZoneProviderRep provider) = IotaTime.Tzdb.metadataWith provider
115 | utc : IO (Either TzdbError TimeZone)
116 | utc = IotaTime.Tzdb.loadSystemUtc
120 | timeZone : String -> IO (Either TzdbError TimeZone)
121 | timeZone = IotaTime.Tzdb.loadSystemTimeZone
125 | localZone : IO (Either TzdbError TimeZone)
126 | localZone = IotaTime.Tzdb.loadSystemLocalZone
130 | availableZones : IO (Either TzdbError (List String))
131 | availableZones = IotaTime.Tzdb.loadSystemAvailableZones
135 | metadata : IO (Either TzdbError TzdbMetadata)
136 | metadata = IotaTime.TimeZone.metadataWith
137 | IotaTime.TimeZone.systemTimeZoneProvider