protobuf.js icon indicating copy to clipboard operation
protobuf.js copied to clipboard

Support google.protobuf.any ?

Open derons8868 opened this issue 11 months ago • 0 comments

protobuf.js version: <7.4.0>

How can I put any message in the "child" field just similar to google.protobuf.any ?

import {
  Message, Type, Field, OneOf,
} from 'protobufjs/light'; // respectively "./node_modules/protobufjs/light.js"

export class ChildString extends Message<ChildString> {
  @Field.d(1, 'string')
  public someString: string = '';
}
export class ChildNumber extends Message<ChildNumber> {
  @Field.d(1, 'int32')
  public someNumber?: number;
}

export class ParentMessage extends Message<ParentMessage> {
  @Field.d(1, 'string')
  public name?: string;

  @Field.d(2, Message) // Any of ChildString or ChildNumber etc...
  public child?: Message;
}

const childMessage = new ChildString();
childMessage.someString = 'Hello World';

const parentMessage = new ParentMessage();
parentMessage.name = 'John';
parentMessage.child = childMessage;

let buffer = ParentMessage.encode(parentMessage).finish();
let decodedMessage = ParentMessage.decode(buffer);
console.info('output:', decodedMessage);

const childMessage2 = new ChildNumber();
childMessage2.someNumber = 123;
parentMessage.child = childMessage2;

buffer = ParentMessage.encode(parentMessage).finish();
decodedMessage = ParentMessage.decode(buffer);
console.info('output:', decodedMessage);
>

Result

output: ParentMessage { name: 'John', child: Message {} }

output: ParentMessage { name: 'John', child: Message {} }

Both output of "child" field is empty.

derons8868 avatar Dec 10 '24 07:12 derons8868