module Hadolint.Rule.DL3053 (rule) where

import qualified Data.Map as Map
import Data.Maybe
import Data.Time.RFC3339
import Hadolint.Rule
import Language.Docker.Syntax


rule :: LabelSchema -> Rule args
rule :: forall args. LabelSchema -> Rule args
rule LabelSchema
labelschema = forall a. Monoid a => [a] -> a
mconcat forall a b. (a -> b) -> a -> b
$
  forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall args. Text -> Rule args
labelIsNotRFC3339Rule (forall k a. Map k a -> [k]
Map.keys (forall a k. (a -> Bool) -> Map k a -> Map k a
Map.filter (forall a. Eq a => a -> a -> Bool
== LabelType
Rfc3339) LabelSchema
labelschema))
{-# INLINEABLE rule #-}


labelIsNotRFC3339Rule :: LabelName -> Rule args
labelIsNotRFC3339Rule :: forall args. Text -> Rule args
labelIsNotRFC3339Rule Text
label = forall args.
RuleCode
-> DLSeverity -> Text -> (Instruction args -> Bool) -> Rule args
simpleRule RuleCode
code DLSeverity
severity Text
message forall {args}. Instruction args -> Bool
check
  where
    code :: RuleCode
code = RuleCode
"DL3053"
    severity :: DLSeverity
severity = DLSeverity
DLWarningC
    message :: Text
message = Text
"Label `" forall a. Semigroup a => a -> a -> a
<> Text
label forall a. Semigroup a => a -> a -> a
<> Text
"` is not a valid time format - must be conform to RFC3339."
    check :: Instruction args -> Bool
check (Label Pairs
ls) = forall (t :: * -> *) a. Foldable t => t a -> Bool
null forall a b. (a -> b) -> a -> b
$ Text -> Pairs -> Pairs
getBadTimeformatLabels Text
label Pairs
ls
    check Instruction args
_ = Bool
True

getBadTimeformatLabels :: LabelName -> Pairs -> Pairs
getBadTimeformatLabels :: Text -> Pairs -> Pairs
getBadTimeformatLabels Text
lbl Pairs
pairs = [(Text
l, Text
v) | (Text
l, Text
v) <- Pairs
pairs,
                                             Text
l forall a. Eq a => a -> a -> Bool
== Text
lbl,
                                             forall a. Maybe a -> Bool
isNothing forall a b. (a -> b) -> a -> b
$ forall t. TextualMonoid t => t -> Maybe ZonedTime
parseTimeRFC3339 Text
v]