@exocet/pandora-protobuf

0.0.1-alpha.1 • Public • Published

Pandora Protobuf

Addon to provide flow and setup functions to encode/decode Protobuf 3 using protobufjs.

npm install --save @exocet/pandora-protobuf

Concepts

Message envelope

The message envelope creates a pattern for transposing data between endpoints, this pattern is defined in the file "lib / standard.proto":

syntax = "proto3";

package pandora.standard;

message MessageEnvelope {
	bytes data = 1;
	repeated bytes collection = 2;
	uint32 total = 3;
}

Setup

Available features:

  • Generate protos from entity definition
  • Multiple protos defined by labels
  • Provide encoder/decoder hook
  • Flow steps: decodeProtobuf, encodeProtobuf

To add this addon into your project, put the addon spec into your endpoint YAML:

kind: Pandora/endpoint
metadata:
  name: myEndpoint
spec:
  addons:
    - name: protobuf
      package: "@exocet/pandora-protobuf"
      flow: true
      setup: true

After the setup the following property of the context will be available:

  • .application.protos - Instance of protobufjs.Root

Hooks

The hooks created by this addon are:

  • protobufEncoder (.service.hooks.useHook('protobufEncoder')) - Synchronous hook to encode data to protobuf
     const [protobufEncoder] = service.hooks.useHook('protobufEncoder');
     const encoded = protobufEncoder('myNamespace.myEntity.myLabel', data);
  • protobufDecoder (.service.hooks.useHook('protobufDecoder')) - Synchronous hook to decode protobuf
     const [protobufDecoder] = service.hooks.useHook('protobufDecoder');
     const data = protobufDecoder('myNamespace.myEntity.myLabel', encoded);

Flow

The provided flow type and steps are listed bellow:

  • decodeProtobuf - This flow decodes protobuf:
     kind: Pandora/flowStep
     metadata:
       name: decodeProtobuf
     spec:
       type: decodeProtobuf
       options:
         inboundFrom: request # JSON Path to acquire protobuf from execution context
     	outboundTo: request # JSON path to put the decoded data
     	wrappedMessageEnvelope: true # Decode inbound wrapped in message envelope
     	collectionAsPayload: true # If the message envelope contains a collection then this flow will put the collection as outbound
     	encodingFrom: null # JSON Path to execution value that contains the current encoding of inbound, if it's specified then this flow will only decode the inbound if the value is "proto3"
         entity: # The entity to parse the proto definition
           label: default
           namespace: stock
           name: product
  • encodeProtobuf - This flow encodes data to protobuf:
     kind: Pandora/flowStep
     metadata:
       name: encodeProtobuf
     spec:
       type: encodeProtobuf
       options:
         inboundFrom: response # JSON Path to acquire data from execution context
     	outboundTo: response # JSON path to put the encoded data
     	wrappedMessageEnvelope: true # Wraps the outbound in message envelope
     	encodingFrom: null  # JSON Path to execution value that contains the desired encoding of outbound, if it's specified then this flow will only encode the inbound if the value is "proto3"
         entity: # The entity to parse the proto definition
           label: default
           namespace: stock
           name: product

Package Sidebar

Install

npm i @exocet/pandora-protobuf

Weekly Downloads

0

Version

0.0.1-alpha.1

License

Apache-2.0

Unpacked Size

39.6 kB

Total Files

26

Last publish

Collaborators

  • codermarcos
  • vflopes