nowgoo/php-protobuf

simple protobuf encoder and decoder

dev-master 2020-12-13 16:46 UTC

This package is auto-updated.

Last update: 2024-04-14 00:02:13 UTC


README

simple protobuf encoder and decoder

features

  • no need to compile .proto files
  • decode & encode without a scheme definition
  • grpc client [wip]

install

composer require nowgoo/php-protobuf dev-master

usage

say we have a .proto defined as:

message Example {
    int32 foo = 1;
    SubMessage bar = 2;
    repeated baz = 3;
}

message SubMessage {
    string bar_sub = 1;
}

code talks:

use \PhpProtobuf\Scheme;
$scheme = new Scheme([
    // simple field
    1 => ['name'=>'foo', 'type'=>Scheme::TYPE_INT],
    // embeded field
    2 => ['name'=>'bar', 'type'=>Scheme::TYPE_EMBEDED, 'fields'=>[
        1 => ['name'=>'bar_sub', 'type'=>Scheme::TYPE_STRING]
    ]],
    // repeated field
    3 => ['name'=>'baz', 'type'=>Scheme::TYPE_INT, 'repeated'=>true],
]);

$binary = $scheme->encode([
    'foo' => 123456,
    'bar' => ['bar_sub' => 'hello, world'],
    'baz' => [3, 270, 86942]
]);
// binary = [08 c0 c4 07 12 0e 0a 0c 68 65 6c 6c 6f 2c 20 77 6f 72 6c 64 1a 06 03 8e 02 9e a7 05]

$decoded = $scheme->decode($binary);
// $decoded == ['foo'=>123456, 'bar'=>['bar_sub'=>'hello, world'], 'baz'=>[3,270,86942]];

decode/encode without a scheme definition

$scheme = new UniversalScheme();
$binary = $scheme->encode([
    'keys' => 123456,
    'were' => 'hello',
    'skipped' => [
        'during' => [
            'encoding' => 'level 3 value'
        ],
        'process' => 'level 2 value',
    ],
]);

$decoded = $scheme->decode($binary);
/*
$decoded:
[
    1 => 123456,
    2 => 'hello',
    3 => [
        1 => [
            1 => 'level 3 value'
        ],
        2 => 'level 2 value',
    ],
]
*/

grpc

[wip]

licence

MIT License