module DataTypeTool.Parsing.Types where import qualified Antelude.List as List import qualified Data.Map.Strict as Map import 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)