packages feed

thrift-compiler-0.1.0.1: Thrift/Compiler/GenClient.hs

{-
  Copyright (c) Meta Platforms, Inc. and affiliates.
  All rights reserved.

  This source code is licensed under the BSD-style license found in the
  LICENSE file in the root directory of this source tree.
-}

{-# LANGUAGE CPP #-}

module Thrift.Compiler.GenClient
  ( genClientDecls
  , genClientImports
  ) where

import Language.Haskell.Exts
import Control.Monad
import qualified Data.Set as Set
import qualified Data.Text as Text

import Thrift.Compiler.GenUtils
import Thrift.Compiler.Plugins.Haskell
import Thrift.Compiler.Types hiding (Decl(..))

genClientImports :: Text.Text -> HS Service -> Set.Set Import
genClientImports this Service{..} =
  case resolvedName . fst . supResolvedName <$> serviceSuper of
    Nothing -> Set.empty
    Just (UName n) -> mkImports this n
    Just (QName m n) -> mkImports m n
  where
    mkImports m n = Set.fromList
      [ QImport (Text.intercalate "." [m, n, "Client"]) n
      ]

genClientDecls :: HS Service -> [Decl ()]
genClientDecls Service{..} =
  DataDecl () (DataType ()) Nothing (DHead () (textToName serviceResolvedName)) []
    mzero
  : case serviceSuper of
    Nothing -> []
    Just Super{..} ->
      [ TypeInsDecl ()
        (qualType "Thrift" "Super" `appT` simpleType serviceResolvedName)
        (case resolvedName . fst $ supResolvedName of
           UName n -> qualType n n
           QName _ n -> qualType n n)
      ]