Skip to content

MliKiowa/napcat-protobuf-runtime

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

54 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

napcat-protobuf-runtime

此库是@protobuf-ts/runtime再封装方案

用途

CodeGen/Proto3文件 的方案处理PB 具有 不适合频繁变动 也不与代码混合的效果 美观度也不高的问题

pb-ts runtime/pb-js runtime 各种库类型提取困难 基于runtime编写困难 pbjs代码不适合打包器 代码美观度不高的问题

既然这样 那么有没有一款既美观 类型提取方便 能和代码写一起 操作简单 语法多样 的封装库呢?

目标与特色

提供快速Develop和优雅的方案进行操作与读取

  • DataClass 风格定义ProtoBuf结构 规范性写法
  • 除开DataClass式结构声明结构 同样能使用Object完成声明PB结构
  • 进行反序列化/序列化的数据绑定 将值同步到外部绑定 无需进行二次结构化数据Object进行encode/decode
  • 支持通过模板快速创建匿名DataClass 并立即填入数据序列化/反序列化
  • Array替代Repeat声明 与语言Array结合
  • 在没有ProtoBuf结构的情况下盲解ProtoBuf数据
  • 支持在一行以内 完成声明->填入数据->encode
  • 提供PB结构序列化JSON/JS对象
  • 规避类型type-orm库存在的属性默认值问题
  • 运行时动态扩展PB字段
  • 在没有ProtoBuf结构的情况下动态盲编码ProtoBuf数据

缺点

proxy + 套嵌 存在性能损失 但是我写的舒服就行了.jpg

示例

import { PBArray, PBString, PBUint32, ProtoBuf, ProtoBufBase, ProtoBufEx, ProtoBufIn, ProtoBufQuick, Reference, StringWrapper, UInt32Wrapper, UnReference, ValueWrapper } from "./protobuf.ts";

class ProtoBufDataInnerClass extends ProtoBufBase {
    data = PBString(1);
    test = PBUint32(2);
}

class ProtoBufDataClass extends ProtoBufBase {
    uin = PBUint32(1);
    inner = ProtoBuf(2, ProtoBufDataInnerClass);
    list = PBArray(3, ProtoBuf(ProtoBufDataInnerClass));
    listinner = PBArray(4, ProtoBuf(class extends ProtoBufBase { data = PBArray(1, PBString()); }));
    listquick = PBArray(5, ProtoBufIn({ data: PBString(1) }));
}
const test = ProtoBufEx(ProtoBufDataClass, {
    inner: {
        data: "x",
        test: 300
    },
    list: [{
        data: "xx",
        test: 5
    }, {
        data: "xxx",
        test: 2
    }],
    listinner: [{
        data: ["x", "xxxx"]
    }],
    listquick: [{
        data: "xxxxx"
    }],
    uin: 0
});
console.log("值首次序列化:", Buffer.from(test.encode()).toString('hex'));
test.inner.test = 200;
console.log("值修改序列化:", Buffer.from(test.encode()).toString('hex'));

About

napcat runtime protobuf runtime

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published