import { decodeMessage, encodeMessage, message, streamMessage } from 'protons-runtime' import type { Codec, DecodeOptions } from 'protons-runtime' import type { Uint8ArrayList } from 'uint8arraylist' export interface Message { message: string value: number flag: boolean } export namespace Message { let _codec: Codec export const codec = (): Codec => { if (_codec == null) { _codec = message((obj, w, opts = {}) => { if (opts.lengthDelimited !== false) { w.fork() } if ((obj.message != null && obj.message !== '')) { w.uint32(10) w.string(obj.message) } if ((obj.value != null && obj.value !== 0)) { w.uint32(16) w.uint32(obj.value) } if ((obj.flag != null && obj.flag !== false)) { w.uint32(24) w.bool(obj.flag) } if (opts.lengthDelimited !== false) { w.ldelim() } }, (reader, length, opts = {}) => { const obj: any = { message: '', value: 0, flag: false } const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { obj.message = reader.string() break } case 2: { obj.value = reader.uint32() break } case 3: { obj.flag = reader.bool() break } default: { reader.skipType(tag & 7) break } } } return obj }, function * (reader, length, prefix, opts = {}) { const end = length == null ? reader.len : reader.pos + length while (reader.pos < end) { const tag = reader.uint32() switch (tag >>> 3) { case 1: { yield { field: `${prefix}.message`, value: reader.string() } break } case 2: { yield { field: `${prefix}.value`, value: reader.uint32() } break } case 3: { yield { field: `${prefix}.flag`, value: reader.bool() } break } default: { reader.skipType(tag & 7) break } } } }) } return _codec } export interface MessageMessageFieldEvent { field: '$.message' value: string } export interface MessageValueFieldEvent { field: '$.value' value: number } export interface MessageFlagFieldEvent { field: '$.flag' value: boolean } export function encode (obj: Partial): Uint8Array { return encodeMessage(obj, Message.codec()) } export function decode (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Message { return decodeMessage(buf, Message.codec(), opts) } export function stream (buf: Uint8Array | Uint8ArrayList, opts?: DecodeOptions): Generator { return streamMessage(buf, Message.codec(), opts) } }