-- Copyright (c) 2013-2014 PivotCloud, Inc. -- -- Aws.Kinesis.Client.Consumer -- -- Please feel free to contact us at licensing@pivotmail.com with any -- contributions, additions, or other feedback; we would love to hear from -- you. -- -- 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. {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE RecordWildCards #-} {-# LANGUAGE UnicodeSyntax #-} -- | -- Module: CLI.Record -- Copyright: Copyright © 2013-2014 PivotCloud, Inc. -- License: Apache-2.0 -- Maintainer: Jon Sterling -- Stability: experimental -- module CLI.Record where import Data.Aeson import Data.Aeson.Types import Data.Time import qualified Data.Text as T import qualified Data.ByteString as BS import Control.Applicative import Control.Applicative.Unicode import Data.Hourglass import Prelude.Unicode data Record = Record { rTimestamp ∷ DateTime , rMessage ∷ T.Text } deriving (Show, Eq) instance FromJSON DateTime where parseJSON = withText "DateTime" $ maybe (fail "Invalid DateTime") return ∘ timeParse fmt ∘ T.unpack where fmt = [ Format_Year4 , hyphen , Format_Month2 , hyphen , Format_Day2 , Format_Text 'T' , Format_Hour , colon , Format_Minute , colon , Format_Second ] hyphen = Format_Text '-' colon = Format_Text ':' instance FromJSON Record where parseJSON = withObject "Record" $ \xs → Record <$> xs .: "time" ⊛ xs .: "message" instance Ord Record where compare r1 r2 = compare (rTimestamp r1) (rTimestamp r2)