Go to file
Pavel Shevaev 4939f05cfc Adding experimental support for @shared_tokens which are applied to all metagen units declared in a file 2023-07-18 15:27:50 +03:00
tests Cleaning metagen package 2022-12-08 19:14:25 +03:00
.gitignore Cleaning metagen package 2022-12-08 19:14:25 +03:00
README.md Изменил(а) на 'README.md' 2022-12-09 12:24:17 +03:00
composer.json Fixing autoload 2022-12-08 19:20:32 +03:00
metagen.inc.php Adding experimental support for enums overriding using @enum_override token 2023-07-14 16:21:22 +03:00
parser.inc.php Adding experimental support for @shared_tokens which are applied to all metagen units declared in a file 2023-07-18 15:27:50 +03:00

README.md

Metagen package is used to describe structures, interfaces, functions, RPC calls using DSL. This can be useful for codegen, bindings, etc.

Here is an example of some imaginary DSL:

#include enum.meta

func GetPlayer(
    id : uint32
) : DataPlayer

func Apply(
    fn : func(float, DataPlayer) : uint32
)

struct DataPlayer
    @POD @table:player @pkey:id
    id                : uint32
    version           : string @strmax:16
    gold              : uint8 @default:0 #bonus
    registered        : bool @default:true

    func Equals(
        o : DataPlayer
        v : uint32
    ) : bool,bool
end

struct ProtoBase
    id    : uint32
    title : string @strmax:16 @default:"Hello"
end

struct ProtoBuilding extends ProtoBase
    floors : int32
    arr : uint32[] @default:[1,2,3]
end

Look at tests for an actual API usage.