{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE ViewPatterns #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# OPTIONS_GHC -fno-ignore-interface-pragmas #-}
{-# OPTIONS_GHC -fno-omit-interface-pragmas #-}
{-# OPTIONS_GHC -fno-specialise #-}
module PlutusLedgerApi.V4.Time
( POSIXTime (..)
, POSIXTimeRange (..)
) where
import PlutusTx.Prelude
import Control.DeepSeq (NFData)
import GHC.Generics (Generic)
import PlutusLedgerApi.V1.Time (POSIXTime (..))
import PlutusTx (makeIsDataSchemaIndexed)
import PlutusTx.Blueprint (HasBlueprintDefinition)
import PlutusTx.Blueprint.Definition.Derive (definitionRef)
import PlutusTx.Lift (makeLift)
import Prettyprinter (Pretty (pretty), comma, (<+>))
import Prelude qualified as Haskell
data POSIXTimeRange = POSIXTimeRange
{ POSIXTimeRange -> Maybe POSIXTime
fromInclusive :: Maybe POSIXTime
, POSIXTimeRange -> Maybe POSIXTime
untilExclusive :: Maybe POSIXTime
}
deriving stock (POSIXTimeRange -> POSIXTimeRange -> Bool
(POSIXTimeRange -> POSIXTimeRange -> Bool)
-> (POSIXTimeRange -> POSIXTimeRange -> Bool) -> Eq POSIXTimeRange
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: POSIXTimeRange -> POSIXTimeRange -> Bool
== :: POSIXTimeRange -> POSIXTimeRange -> Bool
$c/= :: POSIXTimeRange -> POSIXTimeRange -> Bool
/= :: POSIXTimeRange -> POSIXTimeRange -> Bool
Haskell.Eq, Int -> POSIXTimeRange -> ShowS
[POSIXTimeRange] -> ShowS
POSIXTimeRange -> String
(Int -> POSIXTimeRange -> ShowS)
-> (POSIXTimeRange -> String)
-> ([POSIXTimeRange] -> ShowS)
-> Show POSIXTimeRange
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> POSIXTimeRange -> ShowS
showsPrec :: Int -> POSIXTimeRange -> ShowS
$cshow :: POSIXTimeRange -> String
show :: POSIXTimeRange -> String
$cshowList :: [POSIXTimeRange] -> ShowS
showList :: [POSIXTimeRange] -> ShowS
Haskell.Show, (forall x. POSIXTimeRange -> Rep POSIXTimeRange x)
-> (forall x. Rep POSIXTimeRange x -> POSIXTimeRange)
-> Generic POSIXTimeRange
forall x. Rep POSIXTimeRange x -> POSIXTimeRange
forall x. POSIXTimeRange -> Rep POSIXTimeRange x
forall a.
(forall x. a -> Rep a x) -> (forall x. Rep a x -> a) -> Generic a
$cfrom :: forall x. POSIXTimeRange -> Rep POSIXTimeRange x
from :: forall x. POSIXTimeRange -> Rep POSIXTimeRange x
$cto :: forall x. Rep POSIXTimeRange x -> POSIXTimeRange
to :: forall x. Rep POSIXTimeRange x -> POSIXTimeRange
Generic)
deriving anyclass (POSIXTimeRange -> ()
(POSIXTimeRange -> ()) -> NFData POSIXTimeRange
forall a. (a -> ()) -> NFData a
$crnf :: POSIXTimeRange -> ()
rnf :: POSIXTimeRange -> ()
NFData, DefinitionId
DefinitionId -> HasBlueprintDefinition POSIXTimeRange
forall t. DefinitionId -> HasBlueprintDefinition t
$cdefinitionId :: DefinitionId
definitionId :: DefinitionId
HasBlueprintDefinition)
instance Pretty POSIXTimeRange where
pretty :: forall ann. POSIXTimeRange -> Doc ann
pretty (POSIXTimeRange Maybe POSIXTime
lo Maybe POSIXTime
hi) = Doc ann
forall {ann}. Doc ann
prettyFrom Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
forall {ann}. Doc ann
comma Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
forall {ann}. Doc ann
prettyUntil
where
prettyFrom :: Doc ann
prettyFrom = case Maybe POSIXTime
lo of
Maybe POSIXTime
Nothing -> Doc ann
"(-Inf"
Just POSIXTime
t -> Doc ann
"[" Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> POSIXTime -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. POSIXTime -> Doc ann
pretty POSIXTime
t
prettyUntil :: Doc ann
prettyUntil = case Maybe POSIXTime
hi of
Maybe POSIXTime
Nothing -> Doc ann
"+Inf)"
Just POSIXTime
t -> POSIXTime -> Doc ann
forall a ann. Pretty a => a -> Doc ann
forall ann. POSIXTime -> Doc ann
pretty POSIXTime
t Doc ann -> Doc ann -> Doc ann
forall ann. Doc ann -> Doc ann -> Doc ann
<+> Doc ann
")"
deriveEq ''POSIXTimeRange
$(makeIsDataSchemaIndexed ''POSIXTimeRange [('POSIXTimeRange, 0)])
$(makeLift ''POSIXTimeRange)