--
-- MinIO Haskell SDK, (C) 2017 MinIO, Inc.
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
--     http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.
--

module Network.Minio.Data.Time
  ( awsTimeFormat,
    awsTimeFormatBS,
    awsDateFormat,
    awsDateFormatBS,
    awsParseTime,
    iso8601TimeFormat,
    UrlExpiry,
  )
where

import Data.ByteString.Char8 (pack)
import qualified Data.Time as Time
import Lib.Prelude

-- | Time to expire for a presigned URL. It interpreted as a number of
-- seconds. The maximum duration that can be specified is 7 days.
type UrlExpiry = Int

awsTimeFormat :: UTCTime -> [Char]
awsTimeFormat :: UTCTime -> [Char]
awsTimeFormat = TimeLocale -> [Char] -> UTCTime -> [Char]
forall t. FormatTime t => TimeLocale -> [Char] -> t -> [Char]
Time.formatTime TimeLocale
Time.defaultTimeLocale [Char]
"%Y%m%dT%H%M%SZ"

awsTimeFormatBS :: UTCTime -> ByteString
awsTimeFormatBS :: UTCTime -> ByteString
awsTimeFormatBS = [Char] -> ByteString
pack ([Char] -> ByteString)
-> (UTCTime -> [Char]) -> UTCTime -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> [Char]
awsTimeFormat

awsDateFormat :: UTCTime -> [Char]
awsDateFormat :: UTCTime -> [Char]
awsDateFormat = TimeLocale -> [Char] -> UTCTime -> [Char]
forall t. FormatTime t => TimeLocale -> [Char] -> t -> [Char]
Time.formatTime TimeLocale
Time.defaultTimeLocale [Char]
"%Y%m%d"

awsDateFormatBS :: UTCTime -> ByteString
awsDateFormatBS :: UTCTime -> ByteString
awsDateFormatBS = [Char] -> ByteString
pack ([Char] -> ByteString)
-> (UTCTime -> [Char]) -> UTCTime -> ByteString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. UTCTime -> [Char]
awsDateFormat

awsParseTime :: [Char] -> Maybe UTCTime
awsParseTime :: [Char] -> Maybe UTCTime
awsParseTime = Bool -> TimeLocale -> [Char] -> [Char] -> Maybe UTCTime
forall (m :: * -> *) t.
(MonadFail m, ParseTime t) =>
Bool -> TimeLocale -> [Char] -> [Char] -> m t
Time.parseTimeM Bool
False TimeLocale
Time.defaultTimeLocale [Char]
"%Y%m%dT%H%M%SZ"

iso8601TimeFormat :: UTCTime -> [Char]
iso8601TimeFormat :: UTCTime -> [Char]
iso8601TimeFormat = TimeLocale -> [Char] -> UTCTime -> [Char]
forall t. FormatTime t => TimeLocale -> [Char] -> t -> [Char]
Time.formatTime TimeLocale
Time.defaultTimeLocale (Maybe [Char] -> [Char]
Time.iso8601DateFormat (Maybe [Char] -> [Char]) -> Maybe [Char] -> [Char]
forall a b. (a -> b) -> a -> b
$ [Char] -> Maybe [Char]
forall a. a -> Maybe a
Just [Char]
"%T%QZ")