{-# LANGUAGE OverloadedStrings #-}

-- |
--   Module    : Media.Timestamp.Formatting
--   License   : MIT
--   Stability : experimental
--
-- Formatting for `Media.Timestamp`.
module Media.Timestamp.Formatting
  ( timef,
    timecf,
    rangeaf,
  )
where

import Formatting
import Media.Timestamp

-- | Formats a `Time` as `hh:mm:ss.mmm`. This is ffmpeg's format.
--
-- @since 0.1.0.0
timef :: Format r (Time -> r)
timef :: Format r (Time -> r)
timef = (Time -> Int) -> Format r (Int -> r) -> Format r (Time -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Time -> Int
hour Format r (Int -> r)
forall a r. Integral a => Format r (a -> r)
int Format r (Time -> r) -> Format r r -> Format r (Time -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r r
":" Format r (Time -> r)
-> Format r (Time -> r) -> Format r (Time -> r)
forall a. Semigroup a => a -> a -> a
<> (Time -> Int) -> Format r (Int -> r) -> Format r (Time -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Time -> Int
minute Format r (Int -> r)
forall a r. Integral a => Format r (a -> r)
int Format r (Time -> r) -> Format r r -> Format r (Time -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r r
":" Format r (Time -> r)
-> Format r (Time -> r) -> Format r (Time -> r)
forall a. Semigroup a => a -> a -> a
<> (Time -> Int) -> Format r (Int -> r) -> Format r (Time -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Time -> Int
second Format r (Int -> r)
forall a r. Integral a => Format r (a -> r)
int Format r (Time -> r) -> Format r r -> Format r (Time -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r r
"." Format r (Time -> r)
-> Format r (Time -> r) -> Format r (Time -> r)
forall a. Semigroup a => a -> a -> a
<> (Time -> Int) -> Format r (Int -> r) -> Format r (Time -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Time -> Int
millisecond Format r (Int -> r)
forall a r. Integral a => Format r (a -> r)
int

-- | Formats a `Time` as `hh:mm:ss,mmm`. This is .srt format.
--
-- @since 0.1.0.0
timecf :: Format r (Time -> r)
timecf :: Format r (Time -> r)
timecf = (Time -> Int) -> Format r (Int -> r) -> Format r (Time -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Time -> Int
hour Format r (Int -> r)
forall a r. Integral a => Format r (a -> r)
int Format r (Time -> r) -> Format r r -> Format r (Time -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r r
":" Format r (Time -> r)
-> Format r (Time -> r) -> Format r (Time -> r)
forall a. Semigroup a => a -> a -> a
<> (Time -> Int) -> Format r (Int -> r) -> Format r (Time -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Time -> Int
minute Format r (Int -> r)
forall a r. Integral a => Format r (a -> r)
int Format r (Time -> r) -> Format r r -> Format r (Time -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r r
":" Format r (Time -> r)
-> Format r (Time -> r) -> Format r (Time -> r)
forall a. Semigroup a => a -> a -> a
<> (Time -> Int) -> Format r (Int -> r) -> Format r (Time -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Time -> Int
second Format r (Int -> r)
forall a r. Integral a => Format r (a -> r)
int Format r (Time -> r) -> Format r r -> Format r (Time -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r r
"," Format r (Time -> r)
-> Format r (Time -> r) -> Format r (Time -> r)
forall a. Semigroup a => a -> a -> a
<> (Time -> Int) -> Format r (Int -> r) -> Format r (Time -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Time -> Int
millisecond Format r (Int -> r)
forall a r. Integral a => Format r (a -> r)
int

-- | Formats a `Range` as "X --> Y", Formatter for SRT format will
-- therefore be rangeaf timecf.
--
-- @since 0.1.1.0
rangeaf :: Format r (Time -> r) -> Format r (Range -> r)
rangeaf :: Format r (Time -> r) -> Format r (Range -> r)
rangeaf Format r (Time -> r)
x = (Range -> Time) -> Format r (Time -> r) -> Format r (Range -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Range -> Time
from Format r (Time -> r)
x Format r (Range -> r) -> Format r r -> Format r (Range -> r)
forall r a r'. Format r a -> Format r' r -> Format r' a
% Format r r
" --> " Format r (Range -> r)
-> Format r (Range -> r) -> Format r (Range -> r)
forall a. Semigroup a => a -> a -> a
<> (Range -> Time) -> Format r (Time -> r) -> Format r (Range -> r)
forall s a r. (s -> a) -> Format r (a -> r) -> Format r (s -> r)
accessed Range -> Time
to Format r (Time -> r)
x