Skip to content

Commit

Permalink
hstream-io: use deriving instead of template-haskell to derive Aeson …
Browse files Browse the repository at this point in the history
…instance (#1539)
  • Loading branch information
4eUeP authored Aug 2, 2023
1 parent 28c6765 commit 79d6c67
Show file tree
Hide file tree
Showing 3 changed files with 49 additions and 47 deletions.
49 changes: 30 additions & 19 deletions hstream-io/HStream/IO/Messages.hs
Original file line number Diff line number Diff line change
@@ -1,42 +1,51 @@
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE DeriveGeneric #-}

module HStream.IO.Messages where

import qualified Data.Aeson as J
import qualified Data.Aeson.TH as JT
import Data.Char (toLower)
import qualified Data.Text as T
import GHC.Generics (Generic)

import qualified Data.Vector as Vector
import qualified HStream.Utils.Aeson as A

-- Custom Aeson instances options
customOptions :: Int -> J.Options
customOptions n = J.defaultOptions{J.fieldLabelModifier = map toLower . drop n}

-- ============ Connector -> Server
newtype KvGetMessage
= KvGetMessage
{ kgKey :: T.Text
} deriving (Show)
$(JT.deriveJSON
JT.defaultOptions
{ JT.fieldLabelModifier = map toLower . drop 2 }
''KvGetMessage)
} deriving (Show, Generic)

instance J.FromJSON KvGetMessage where
parseJSON = J.genericParseJSON (customOptions 2)

instance J.ToJSON KvGetMessage where
toEncoding = J.genericToEncoding (customOptions 2)

data KvSetMessage
= KvSetMessage
{ ksKey :: T.Text
, ksValue :: T.Text
} deriving (Show)
$(JT.deriveJSON
JT.defaultOptions
{ JT.fieldLabelModifier = map toLower . drop 2 }
''KvSetMessage)
} deriving (Show, Generic)

instance J.FromJSON KvSetMessage where
parseJSON = J.genericParseJSON (customOptions 2)

instance J.ToJSON KvSetMessage where
toEncoding = J.genericToEncoding (customOptions 2)

data ReportMessage = ReportMessage
{ deliveredRecords :: Int
, deliveredBytes :: Int
, offsets :: Vector.Vector J.Object
} deriving (Show)
$(JT.deriveJSON JT.defaultOptions ''ReportMessage)
} deriving (Show, Generic)

instance J.FromJSON ReportMessage
instance J.ToJSON ReportMessage

data ConnectorMessage
= KvGet KvGetMessage
Expand Down Expand Up @@ -88,8 +97,10 @@ data CheckResult
, crtType :: Maybe T.Text
, crtMessage :: Maybe T.Text
, crtDetail :: Maybe J.Value
}
$(JT.deriveJSON
JT.defaultOptions
{ JT.fieldLabelModifier = map toLower . drop 3 }
''CheckResult)
} deriving (Show, Generic)

instance J.FromJSON CheckResult where
parseJSON = J.genericParseJSON (customOptions 3)

instance J.ToJSON CheckResult where
toEncoding = J.genericToEncoding (customOptions 3)
44 changes: 19 additions & 25 deletions hstream-io/HStream/IO/Types.hs
Original file line number Diff line number Diff line change
@@ -1,28 +1,28 @@
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TemplateHaskell #-}

module HStream.IO.Types where

import qualified Control.Concurrent as C
import Control.Exception (Exception)
import qualified Control.Exception as E
import qualified Data.Aeson as J
import qualified Data.Aeson.TH as JT
import qualified Data.Aeson.KeyMap as J
import qualified Data.Aeson.Text as J
import qualified Data.ByteString.Lazy as BSL
import qualified Data.ByteString.Lazy.Char8 as BSLC
import qualified Data.HashMap.Strict as HM
import Data.IORef (IORef)
import qualified Data.Text as T
import qualified Data.Text.Lazy as TL
import qualified Data.Vector as Vector
import GHC.Generics (Generic)
import qualified GHC.IO.Handle as IO
import qualified System.Process.Typed as TP
import ZooKeeper.Types (ZHandle)

import qualified Control.Exception as E
import qualified Data.Aeson.KeyMap as J
import qualified Data.Aeson.Text as J
import qualified Data.Text.Lazy as TL
import qualified Data.Vector as Vector
import qualified HStream.Exception as E
import qualified HStream.IO.LineReader as LR
import HStream.MetaStore.Types (FHandle, HasPath (..), MetaHandle,
Expand All @@ -34,15 +34,12 @@ import qualified HStream.ThirdParty.Protobuf as PB
import Proto3.Suite (def)

data IOTaskType = SOURCE | SINK
deriving (Show, Eq)
$(JT.deriveJSON JT.defaultOptions ''IOTaskType)
deriving (Show, Eq, Generic, J.FromJSON, J.ToJSON)

data TaskConfig = TaskConfig
{ tcImage :: T.Text
, tcNetwork :: T.Text
}
deriving (Show)
$(JT.deriveJSON JT.defaultOptions ''TaskConfig)
} deriving (Show, Eq, Generic, J.FromJSON, J.ToJSON)

data TaskInfo = TaskInfo
{ taskName :: T.Text
Expand All @@ -51,9 +48,7 @@ data TaskInfo = TaskInfo
, taskCreatedTime :: Grpc.Timestamp
, taskConfig :: TaskConfig
, connectorConfig :: J.Object
}
deriving (Show)
$(JT.deriveJSON JT.defaultOptions ''TaskInfo)
} deriving (Show, Eq, Generic, J.FromJSON, J.ToJSON)

data IOTaskStatus
= NEW
Expand All @@ -62,8 +57,7 @@ data IOTaskStatus
| FAILED
| COMPLETED
| DELETED
deriving (Show, Eq)
$(JT.deriveJSON JT.defaultOptions ''IOTaskStatus)
deriving (Show, Eq, Generic, J.FromJSON, J.ToJSON)

data IOOptions = IOOptions
{ optTasksNetwork :: T.Text
Expand Down Expand Up @@ -95,8 +89,8 @@ data ConnectorMetaConfig

newtype HStreamConfig = HStreamConfig
{ serviceUrl :: T.Text
} deriving (Show)
$(JT.deriveJSON JT.defaultOptions ''HStreamConfig)
} deriving (Show, Eq, Generic)
deriving anyclass (J.FromJSON, J.ToJSON)

data Worker = Worker
{ hsConfig :: HStreamConfig
Expand All @@ -110,17 +104,17 @@ data Worker = Worker
data TaskMeta = TaskMeta {
taskInfoMeta :: TaskInfo
, taskStateMeta :: IOTaskStatus
} deriving (Show)
$(JT.deriveJSON JT.defaultOptions ''TaskMeta)
} deriving (Show, Eq, Generic)
deriving anyclass (J.FromJSON, J.ToJSON)

newtype TaskIdMeta = TaskIdMeta {taskIdMeta :: T.Text}
deriving (Show)
$(JT.deriveJSON JT.defaultOptions ''TaskIdMeta)
deriving (Show, Eq, Generic)
deriving anyclass (J.FromJSON, J.ToJSON)

newtype TaskKvMeta = TaskKvMeta
{ value :: T.Text
} deriving (Show)
$(JT.deriveJSON JT.defaultOptions ''TaskKvMeta)
} deriving (Show, Eq, Generic)
deriving anyclass (J.FromJSON, J.ToJSON)

ioRootPath :: T.Text
ioRootPath = "/hstream/io"
Expand Down
3 changes: 0 additions & 3 deletions hstream-io/hstream-io.cabal
Original file line number Diff line number Diff line change
Expand Up @@ -56,13 +56,10 @@ library
, bytestring
, containers
, directory
, grpc-haskell
, grpc-haskell-core
, hstream-api-hs
, hstream-common
, hstream-common-base
, hstream-common-stats
, hstream-sql
, proto3-suite
, scientific
, stm
Expand Down

0 comments on commit 79d6c67

Please sign in to comment.