module Language.Bond.Codegen.Cpp.Comm_cpp (comm_cpp) where
import Data.Monoid
import Prelude
import Data.Text.Lazy (Text)
import Text.Shakespeare.Text
import Language.Bond.Syntax.Types
import Language.Bond.Codegen.TypeMapping
import Language.Bond.Codegen.Util
import qualified Language.Bond.Codegen.Cpp.Util as CPP
comm_cpp :: MappingContext -> String -> [Import] -> [Declaration] -> (String, Text)
comm_cpp cpp file _imports declarations = ("_comm.cpp", [lt|
#include "#{file}_reflection.h"
#include "#{file}_comm.h"
#include <bond/core/exception.h>
#{CPP.openNamespace cpp}
#{doubleLineSepEnd 1 statics declarations}
#{CPP.closeNamespace cpp}
|])
where
statics s@Service {..} =
if null declParams then CPP.schemaMetadata cpp s else mempty
statics _ = mempty