Библиотека @vicimpa/proto
предоставляет гибкий и эффективный способ
сериализации и десериализации данных с использованием пользовательского
протокола. Она поддерживает примитивные типы, пользовательские типы и сложные
вложенные структуры. Библиотека построена вокруг библиотеки
@vicimpa/DataBuffer
, который обрабатывает низкоуровневое чтение и запись
данных.
Для установки библиотеки используйте npm или yarn:
npm install @vicimpa/proto
или
yarn add @vicimpa/proto
import { DataBuffer } from "@vicimpa/data-buffer";
import { makeCustomType, makeEnum, Proto } from "@vicimpa/proto";
Библиотека поддерживает следующие примитивные типы:
boolean
int8
int16
int32
uint8
uint16
uint32
float32
float64
bigint64
biguint64
string
Вы можете создавать пользовательские типы с помощью функции makeCustomType
.
Пользовательский тип определяется двумя функциями: одна для сериализации данных
(from
), другая для десериализации данных (to
).
const customType = makeCustomType(
(db, value) => {
// Сериализация значения в DataBuffer
},
(db) => {
// Десериализация значения из DataBuffer
return value;
},
);
Перечисления можно создавать с помощью функции makeEnum
. Эта функция принимает
стандартный объект перечисления и возвращает пользовательский тип для этого
перечисления.
enum MyEnum {
A = 1,
B = 2,
C = 3,
}
const myEnumType = makeEnum(MyEnum);
Класс Proto
является ядром библиотеки. Он обрабатывает сериализацию и
десериализацию сложных структур.
Конструктор принимает параметр, который определяет структуру данных.
const proto = new Proto({
field1: "int32",
field2: "string",
field3: [myEnumType],
});
-
from(value: TProtoValue<T>, param?: TProtoParam, db?: DataBuffer): ArrayBuffer
- Сериализует заданное значение в
ArrayBuffer
.
- Сериализует заданное значение в
-
to(buffer?: ArrayBuffer, param?: TProtoParam, db?: DataBuffer): TProtoValue<T>
- Десериализует заданный
ArrayBuffer
в исходное значение.
- Десериализует заданный
import { DataBuffer, makeCustomType, makeEnum, Proto } from "@vicimpa/proto";
// Определение пользовательского типа
const customType = makeCustomType(
(db, value) => {
db.writeuint32(value.id);
db.writestring(value.name);
},
(db) => {
return {
id: db.readuint32(),
name: db.readstring(),
};
},
);
// Определение перечисления
enum MyEnum {
A = 1,
B = 2,
C = 3,
}
const myEnumType = makeEnum(MyEnum);
// Определение структуры
const proto = new Proto({
field1: "int32",
field2: "string",
field3: [myEnumType],
field4: customType,
});
// Сериализация данных
const data = {
field1: 42,
field2: "Hello, world!",
field3: [MyEnum.A, MyEnum.B],
field4: { id: 1, name: "Custom" },
};
const buffer = proto.from(data);
// Десериализация данных
const deserializedData = proto.to(buffer);
console.log(deserializedData);
Объединенный тип, представляющий все поддерживаемые примитивные типы.
Тип, который отображает примитивный тип на соответствующий тип значения.
Тип, представляющий пользовательский тип с методами from
и to
.
Объединенный тип, представляющий все поддерживаемые типы, включая примитивные типы и пользовательские типы.
Объединенный тип, представляющий все возможные типы параметров, включая вложенные структуры.
Тип, представляющий объект с ключами, отображенными на значения типа
TProtoParam
.
Тип, который извлекает выходной тип пользовательского типа.
Тип, который отображает TProtoParam
на соответствующий тип значения.
makeCustomType<T>(from: TCustomType<T>[typeof FROM_SYMBOL], to: TCustomType<T>[typeof TO_SYMBOL]): TCustomType<T>
Создает пользовательский тип с заданными методами from
и to
.
Создает пользовательский тип для заданного перечисления.
Основной класс для сериализации и десериализации данных.
-
constructor(param: T)
- Создает новый экземпляр
Proto
с заданной структурой параметров.
- Создает новый экземпляр
-
from(value: TProtoValue<T>, param?: TProtoParam, db?: DataBuffer): ArrayBuffer
- Сериализует заданное значение в
ArrayBuffer
.
- Сериализует заданное значение в
-
to(buffer?: ArrayBuffer, param?: TProtoParam, db?: DataBuffer): TProtoValue<T>
- Десериализует заданный
ArrayBuffer
в исходное значение.
- Десериализует заданный
Библиотека @vicimpa/proto
предоставляет мощный и гибкий способ обработки
сериализации и десериализации сложных структур данных. Поддерживая примитивные
типы, пользовательские типы и перечисления, она позволяет определять и работать
с широким спектром форматов данных.