packages feed

neko-obfs-0.1.0.0: src/Options.hs

-- |

{-# 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)
    }