0 | ||| Native-free iotaTime surface for applications that supply their own
  1 | ||| time-zone provider and do not require operating-system locale acquisition.
  2 | module IotaTime.Pure
  3 |
  4 | import public IotaTime.Duration
  5 | import public IotaTime.Instant
  6 | import public IotaTime.Interval
  7 | import public IotaTime.Offset
  8 | import public IotaTime.Period
  9 | import public IotaTime.Calendar
 10 | import public IotaTime.Calendar.Gregorian
 11 | import public IotaTime.Calendar.Iso
 12 | import public IotaTime.Calendar.Coptic
 13 | import public IotaTime.Calendar.Islamic
 14 | import public IotaTime.Calendar.Persian
 15 | import public IotaTime.Calendar.Julian
 16 | import public IotaTime.Calendar.Hebrew
 17 | import public IotaTime.LocalTime
 18 | import public IotaTime.CalendarDateTime
 19 | import public IotaTime.OffsetDateTime
 20 | import public IotaTime.TimeZone.Core
 21 | import public IotaTime.TimeZone.Error
 22 | import public IotaTime.ZonedDateTime
 23 | import public IotaTime.Clock
 24 | import public IotaTime.Tzdb.Metadata
 25 | import IotaTime.Tzdb.Provider
 26 | import public IotaTime.Pattern
 27 | import public IotaTime.Pattern.Scalar
 28 | import public IotaTime.Pattern.Calendar
 29 | import public IotaTime.Pattern.Duration
 30 | import public IotaTime.Pattern.Offset
 31 |
 32 | export
 33 | record TimeZoneProviderRep where
 34 | constructor MkTimeZoneProviderRep
 35 | providerRepresentation : IotaTime.Tzdb.Provider.TimeZoneProviderRep
 36 |
 37 | ||| An opaque caller-supplied source of time zones and associated metadata.
 38 | public export
 39 | TimeZoneProvider : Type
 40 | TimeZoneProvider = IotaTime.Pure.TimeZoneProviderRep
 41 |
 42 | ||| Build a provider from its loading operations.
 43 | public export
 44 | timeZoneProvider : IO (Either TzdbError TimeZone) ->
 45 |  (String -> IO (Either TzdbError TimeZone)) ->
 46 |  IO (Either TzdbError TimeZone) ->
 47 |  IO (Either TzdbError (List String)) ->
 48 |  IO (Either TzdbError TzdbMetadata) ->
 49 |  TimeZoneProvider
 50 | timeZoneProvider utcAction zoneAction localAction availableAction metadataAction =
 51 | MkTimeZoneProviderRep $ IotaTime.Tzdb.Provider.timeZoneProvider
 52 | utcAction zoneAction localAction availableAction metadataAction
 53 |
 54 | export
 55 | record TimeZoneCachePolicyRep where
 56 | constructor MkTimeZoneCachePolicyRep
 57 | cachePolicyRepresentation : IotaTime.Tzdb.Provider.TimeZoneCachePolicyRep
 58 |
 59 | public export
 60 | TimeZoneCachePolicy : Type
 61 | TimeZoneCachePolicy = IotaTime.Pure.TimeZoneCachePolicyRep
 62 |
 63 | public export
 64 | timeZoneCachePolicy : (cacheNamedZones : Bool) ->
 65 | (cacheAvailableZones : Bool) ->
 66 | (cacheMetadata : Bool) ->
 67 | (cacheLocalZone : Bool) ->
 68 | TimeZoneCachePolicy
 69 | timeZoneCachePolicy named available valueMetadata local =
 70 | MkTimeZoneCachePolicyRep $ IotaTime.Tzdb.Provider.timeZoneCachePolicy
 71 | named available valueMetadata local
 72 |
 73 | public export
 74 | defaultTimeZoneCachePolicy : TimeZoneCachePolicy
 75 | defaultTimeZoneCachePolicy =
 76 | MkTimeZoneCachePolicyRep IotaTime.Tzdb.Provider.defaultTimeZoneCachePolicy
 77 |
 78 | public export
 79 | cachedTimeZoneProvider : TimeZoneCachePolicy -> TimeZoneProvider ->
 80 |  IO TimeZoneProvider
 81 | cachedTimeZoneProvider (MkTimeZoneCachePolicyRep policy)
 82 |  (MkTimeZoneProviderRep provider) =
 83 | MkTimeZoneProviderRep <$>
 84 | IotaTime.Tzdb.Provider.cachedTimeZoneProvider policy provider
 85 |
 86 | public export
 87 | utcWith : TimeZoneProvider -> IO (Either TzdbError TimeZone)
 88 | utcWith (MkTimeZoneProviderRep provider) =
 89 | IotaTime.Tzdb.Provider.runProviderUtc provider
 90 |
 91 | public export
 92 | timeZoneWith : TimeZoneProvider -> String -> IO (Either TzdbError TimeZone)
 93 | timeZoneWith (MkTimeZoneProviderRep provider) =
 94 | IotaTime.Tzdb.Provider.runProviderTimeZone provider
 95 |
 96 | public export
 97 | localZoneWith : TimeZoneProvider -> IO (Either TzdbError TimeZone)
 98 | localZoneWith (MkTimeZoneProviderRep provider) =
 99 | IotaTime.Tzdb.Provider.runProviderLocalZone provider
100 |
101 | public export
102 | availableZonesWith : TimeZoneProvider ->
103 |  IO (Either TzdbError (List String))
104 | availableZonesWith (MkTimeZoneProviderRep provider) =
105 | IotaTime.Tzdb.Provider.runProviderAvailableZones provider
106 |
107 | public export
108 | metadataWith : TimeZoneProvider -> IO (Either TzdbError TzdbMetadata)
109 | metadataWith (MkTimeZoneProviderRep provider) =
110 | IotaTime.Tzdb.Provider.runProviderMetadata provider
111 |