Something went wrong. Try again.
Define datatypes once, get polyglot results
Something went wrong. Try again.
2.8 kB · 119 lines
Haskell
at main
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120module DataTypeTool.Parsing.Types where
import qualified Antelude.List as List
import qualified Data.Map.Strict as Mapimport qualified Data.Text as Text
type DataTypeFile = List DataTypes
data Types -- Encodable = DTTStr | DTTInt | DTTFloat | DTTBool | DTTList Types | DTTDict Types -- Nullability | DTTNullable Types -- Not _Normally_ Encodable | DTTSet Types | DTTPair Types Types | DTTTrio Types Types Types | DTTQuad Types Types Types Types | DTTQuint Types Types Types Types Types -- .type-File Defined | ImportedType Types | DefinedDataType Text deriving (Show)
data Values = VStr String | VInt Integer | VFloat Float | VBool Bool | VList (List Values) | VDict (Map String Values) | VNullable (Maybe Values) | VSet (Set Values) | VTuple2 (Values, Values) | VTuple3 (Values, Values, Values) | VTuple4 (Values, Values, Values, Values) | VTuple5 (Values, Values, Values, Values, Values) | OtherValue Text deriving (Eq, Ord, Show)
data DataTypes = Alias { aliasName :: Text , aliasMeta :: Maybe MetaField , aliasType :: Types } | Enum { enumName :: Text , enumMeta :: Maybe MetaField , enumMembers :: List Values } | Model { modelName :: Text , modelMeta :: Maybe MetaField , modelFields :: List ModelField } | Constant { constantName :: Text , constantMeta :: Maybe MetaField , constantType :: Types , constantValue :: Values } deriving (Show)
data AliasParams = AliasMeta (Maybe MetaField) | AliasType Types deriving (Show)
data EnumParams = EnumName Text | EnumMeta (Maybe MetaField) | EnumMembers (List Values) deriving (Show)
data ModelParams = ModelName Text | ModelMeta (Maybe MetaField) | ModelFields (List ModelField) deriving (Show)
data ConstantParams = ConstantName Text | ConstantMeta (Maybe MetaField) | ConstantType Types | ConstantValue Values deriving (Show)
data MetaField = MetaField { metaDoc :: Maybe Text , metaRef :: Maybe (List (FilePath, List Types)) , metaLang :: Maybe (List Text) } deriving (Show)
data MetaParams = MetaDoc (Maybe Text) | MetaRef (Maybe (List (FilePath, List Types))) | MetaLang (Maybe (List Text)) deriving (Show)
data ModelField = ModelField { fieldName :: Text , fieldType :: Types } deriving (Show)
data ModelFieldParams = FieldName Text | FieldType Types deriving (Show)