{-# LANGUAGE OverloadedStrings #-}
module Hydra.Sources.Tier4.Langs.Protobuf.Language (protobufLanguageModule) where
import Prelude hiding ((++))
import qualified Data.List as L
import qualified Data.Map as M
import qualified Data.Set as S
import qualified Data.Maybe as Y
import Hydra.Dsl.Base as Base
import qualified Hydra.Dsl.Core as Core
import qualified Hydra.Dsl.Graph as Graph
import qualified Hydra.Dsl.Lib.Equality as Equality
import qualified Hydra.Dsl.Lib.Flows as Flows
import qualified Hydra.Dsl.Lib.Io as Io
import qualified Hydra.Dsl.Lib.Lists as Lists
import qualified Hydra.Dsl.Lib.Literals as Literals
import qualified Hydra.Dsl.Lib.Logic as Logic
import qualified Hydra.Dsl.Lib.Maps as Maps
import qualified Hydra.Dsl.Lib.Math as Math
import qualified Hydra.Dsl.Lib.Optionals as Optionals
import qualified Hydra.Dsl.Lib.Sets as Sets
import Hydra.Dsl.Lib.Strings as Strings
import qualified Hydra.Dsl.Module as Module
import qualified Hydra.Dsl.Terms as Terms
import qualified Hydra.Dsl.Types as Types
import Hydra.Sources.Tier3.All
protobufLanguageDefinition :: String -> Datum a -> Definition a
protobufLanguageDefinition :: forall a. String -> Datum a -> Definition a
protobufLanguageDefinition = Module -> String -> Datum a -> Definition a
forall a. Module -> String -> Datum a -> Definition a
definitionInModule Module
protobufLanguageModule
protobufLanguageModule :: Module
protobufLanguageModule :: Module
protobufLanguageModule = Namespace
-> [Element] -> [Module] -> [Module] -> Maybe String -> Module
Module Namespace
ns [Element]
elements [Module
hydraCodersModule, Module
hydraBasicsModule, Module
hydraStripModule] [Module]
tier0Modules (Maybe String -> Module) -> Maybe String -> Module
forall a b. (a -> b) -> a -> b
$
String -> Maybe String
forall a. a -> Maybe a
Just String
"Language constraints for Protobuf v3"
where
ns :: Namespace
ns = String -> Namespace
Namespace String
"hydra/langs/protobuf/language"
elements :: [Element]
elements = [
Definition Language -> Element
forall a. Definition a -> Element
el Definition Language
protobufLanguageDef,
Definition (Set String) -> Element
forall a. Definition a -> Element
el Definition (Set String)
protobufReservedWordsDef]
protobufLanguageDef :: Definition (Language)
protobufLanguageDef :: Definition Language
protobufLanguageDef = String -> Datum Language -> Definition Language
forall a. String -> Datum a -> Definition a
protobufLanguageDefinition String
"protobufLanguage" (Datum Language -> Definition Language)
-> Datum Language -> Definition Language
forall a b. (a -> b) -> a -> b
$
String -> Datum Language -> Datum Language
forall a. String -> Datum a -> Datum a
doc String
"Language constraints for Protocol Buffers v3" (Datum Language -> Datum Language)
-> Datum Language -> Datum Language
forall a b. (a -> b) -> a -> b
$
Type -> Datum Language -> Datum Language
forall a. Type -> Datum a -> Datum a
typed Type
languageT (Datum Language -> Datum Language)
-> Datum Language -> Datum Language
forall a b. (a -> b) -> a -> b
$
Name -> [Field] -> Datum Language
forall a. Name -> [Field] -> Datum a
record Name
_Language [
Name
_Language_nameName -> Datum Any -> Field
forall a. Name -> Datum a -> Field
>>: Name -> Datum Any -> Datum Any
forall a b. Name -> Datum a -> Datum b
wrap Name
_LanguageName Datum Any
"hydra/langs/protobuf",
Name
_Language_constraintsName -> Datum Any -> Field
forall a. Name -> Datum a -> Field
>>: Name -> [Field] -> Datum Any
forall a. Name -> [Field] -> Datum a
record Name
_LanguageConstraints [
Name
_LanguageConstraints_eliminationVariantsName -> Datum (Set Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Set Any)
forall a. Datum (Set a)
Sets.empty,
Name
_LanguageConstraints_literalVariantsName -> Datum (Set Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum ([Any] -> Set Any)
forall a. Datum ([a] -> Set a)
Sets.fromList Datum ([Any] -> Set Any) -> Datum [Any] -> Datum (Set Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list (Name -> Name -> Datum Any
forall a. Name -> Name -> Datum a
unitVariant Name
_LiteralVariant (Name -> Datum Any) -> [Name] -> [Datum Any]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [
Name
_LiteralVariant_binary,
Name
_LiteralVariant_boolean,
Name
_LiteralVariant_float,
Name
_LiteralVariant_integer,
Name
_LiteralVariant_string]),
Name
_LanguageConstraints_floatTypesName -> Datum (Set Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum ([Any] -> Set Any)
forall a. Datum ([a] -> Set a)
Sets.fromList Datum ([Any] -> Set Any) -> Datum [Any] -> Datum (Set Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list (Name -> Name -> Datum Any
forall a. Name -> Name -> Datum a
unitVariant Name
_FloatType (Name -> Datum Any) -> [Name] -> [Datum Any]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [
Name
_FloatType_float32,
Name
_FloatType_float64]),
Name
_LanguageConstraints_functionVariantsName -> Datum (Set Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum (Set Any)
forall a. Datum (Set a)
Sets.empty,
Name
_LanguageConstraints_integerTypesName -> Datum (Set Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum ([Any] -> Set Any)
forall a. Datum ([a] -> Set a)
Sets.fromList Datum ([Any] -> Set Any) -> Datum [Any] -> Datum (Set Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list (Name -> Name -> Datum Any
forall a. Name -> Name -> Datum a
unitVariant Name
_IntegerType (Name -> Datum Any) -> [Name] -> [Datum Any]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [
Name
_IntegerType_int32,
Name
_IntegerType_int64,
Name
_IntegerType_uint32,
Name
_IntegerType_uint64]),
Name
_LanguageConstraints_termVariantsName -> Datum (Set Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum ([Any] -> Set Any)
forall a. Datum ([a] -> Set a)
Sets.fromList Datum ([Any] -> Set Any) -> Datum [Any] -> Datum (Set Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list (Name -> Name -> Datum Any
forall a. Name -> Name -> Datum a
unitVariant Name
_TermVariant (Name -> Datum Any) -> [Name] -> [Datum Any]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [
Name
_TermVariant_list,
Name
_TermVariant_literal,
Name
_TermVariant_map,
Name
_TermVariant_optional,
Name
_TermVariant_record,
Name
_TermVariant_union]),
Name
_LanguageConstraints_typeVariantsName -> Datum (Set Any) -> Field
forall a. Name -> Datum a -> Field
>>: Datum ([Any] -> Set Any)
forall a. Datum ([a] -> Set a)
Sets.fromList Datum ([Any] -> Set Any) -> Datum [Any] -> Datum (Set Any)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ [Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list (Name -> Name -> Datum Any
forall a. Name -> Name -> Datum a
unitVariant Name
_TypeVariant (Name -> Datum Any) -> [Name] -> [Datum Any]
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> [
Name
_TypeVariant_annotated,
Name
_TypeVariant_list,
Name
_TypeVariant_literal,
Name
_TypeVariant_map,
Name
_TypeVariant_optional,
Name
_TypeVariant_record,
Name
_TypeVariant_union,
Name
_TypeVariant_variable]),
Name
_LanguageConstraints_typesName -> Datum (Any -> Bool) -> Field
forall a. Name -> Datum a -> Field
>>: Name -> Maybe (Datum Bool) -> [Field] -> Datum (Any -> Bool)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_Type (Datum Bool -> Maybe (Datum Bool)
forall a. a -> Maybe a
Just Datum Bool
true) [
Name
_Type_mapName -> Datum (Any -> Any) -> Field
forall a. Name -> Datum a -> Field
>>: String -> Datum Bool -> Datum (Any -> Any)
forall x a b. String -> Datum x -> Datum (a -> b)
lambda String
"mt" (Name -> Maybe (Datum Bool) -> [Field] -> Datum (Type -> Bool)
forall b u. Name -> Maybe (Datum b) -> [Field] -> Datum (u -> b)
match Name
_Type (Datum Bool -> Maybe (Datum Bool)
forall a. a -> Maybe a
Just Datum Bool
true) [
Name
_Type_optionalName -> Datum (Any -> Bool) -> Field
forall a. Name -> Datum a -> Field
>>: Datum Bool -> Datum (Any -> Bool)
forall a b. Datum a -> Datum (b -> a)
constant Datum Bool
false] Datum (Type -> Bool) -> Datum Type -> Datum Bool
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Definition (Type -> Type) -> Datum (Type -> Type)
forall a. Definition a -> Datum a
ref Definition (Type -> Type)
stripTypeDef Datum (Type -> Type) -> Datum Type -> Datum Type
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum (MapType -> Type)
Core.mapTypeValues Datum (MapType -> Type) -> Datum MapType -> Datum Type
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ String -> Datum MapType
forall a. String -> Datum a
var String
"mt")))]]]
protobufReservedWordsDef :: Definition (S.Set String)
protobufReservedWordsDef :: Definition (Set String)
protobufReservedWordsDef = String -> Datum (Set String) -> Definition (Set String)
forall a. String -> Datum a -> Definition a
protobufLanguageDefinition String
"protobufReservedWords" (Datum (Set String) -> Definition (Set String))
-> Datum (Set String) -> Definition (Set String)
forall a b. (a -> b) -> a -> b
$
String -> Datum (Set String) -> Datum (Set String)
forall a. String -> Datum a -> Datum a
doc String
"A set of reserved words in Protobuf" (Datum (Set String) -> Datum (Set String))
-> Datum (Set String) -> Datum (Set String)
forall a b. (a -> b) -> a -> b
$
Type -> Datum (Set String) -> Datum (Set String)
forall a. Type -> Datum a -> Datum a
typed (Type -> Type
setT Type
stringT) (Datum (Set String) -> Datum (Set String))
-> Datum (Set String) -> Datum (Set String)
forall a b. (a -> b) -> a -> b
$
(Datum ([String] -> Set String)
forall a. Datum ([a] -> Set a)
Sets.fromList Datum ([String] -> Set String)
-> Datum [String] -> Datum (Set String)
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ (Datum ([[String]] -> [String])
forall a. Datum ([[a]] -> [a])
Lists.concat Datum ([[String]] -> [String])
-> Datum [[String]] -> Datum [String]
forall a b. Datum (a -> b) -> Datum a -> Datum b
@@ [Datum [String]] -> Datum [[String]]
forall a. [Datum a] -> Datum [a]
list [String -> Datum [String]
forall a. String -> Datum a
var String
"fieldNames"]))
Datum (Set String) -> [Field] -> Datum (Set String)
forall a. Datum a -> [Field] -> Datum a
`with` [
String
"fieldNames"String -> Datum [Any] -> Field
forall a. String -> Datum a -> Field
>:
String -> Datum [Any] -> Datum [Any]
forall a. String -> Datum a -> Datum a
doc String
"See: http://google.github.io/proto-lens/reserved-names.html" (Datum [Any] -> Datum [Any]) -> Datum [Any] -> Datum [Any]
forall a b. (a -> b) -> a -> b
$
[Datum Any] -> Datum [Any]
forall a. [Datum a] -> Datum [a]
list [
Datum Any
"case", Datum Any
"class", Datum Any
"data", Datum Any
"default", Datum Any
"deriving", Datum Any
"do", Datum Any
"else", Datum Any
"foreign", Datum Any
"if", Datum Any
"import", Datum Any
"in", Datum Any
"infix", Datum Any
"infixl",
Datum Any
"infixr", Datum Any
"instance", Datum Any
"let", Datum Any
"mdo", Datum Any
"module", Datum Any
"newtype", Datum Any
"of", Datum Any
"pattern", Datum Any
"proc", Datum Any
"rec", Datum Any
"then", Datum Any
"type", Datum Any
"where"]]