-- | {-# LANGUAGE DeriveGeneric #-} module Options where import Options.Generic import Data.Maybe (fromMaybe) import Type (Config(..), Role(..), defaultConfig) data TunnelOptions = TunnelOptions { localHost :: Maybe Text , localPort :: Maybe Integer , remoteHost :: Text , remotePort :: Integer , forwardHost :: Maybe Text , forwardPort :: Maybe Integer , remote :: Bool , bound :: Maybe Integer , randomness :: Maybe Integer , timeoutInSeconds :: Maybe Integer } deriving (Generic, Show, Eq) instance ParseRecord TunnelOptions toConfig :: TunnelOptions -> Config toConfig o = let c = defaultConfig in Config { _localHost = fromMaybe (_localHost c) (localHost o) , _localPort = fromMaybe (_localPort c) (localPort o) , _remoteHost = remoteHost o , _remotePort = remotePort o , _forwardHost = fromMaybe (_forwardHost c) (forwardHost o) , _forwardPort = fromMaybe (_forwardPort c) (forwardPort o) , _role = if remote o then Remote else Local , _bound = fromMaybe (_bound c) (bound o) , _randomness = fromMaybe (_randomness c) (randomness o) , _timeoutInSeconds = fromMaybe (_timeoutInSeconds c) (timeoutInSeconds o) }