Модуль varbinary
Начиная с: 3.0.0
Модуль varbinary предоставляет функции для работы с бинарными
объектами переменной длины в Lua. Он содержит функции для создания
объектов varbinary, проверки их типа, а также определяет базовые
операторы для таких объектов.
Например:
local varbinary = require('varbinary')-- Create a varbinary objectlocal bin = varbinary.new('data')local bin_hex = varbinary.new('\xFF\xFE')-- Check whether a value is a varbinary objectvarbinary.is(bin) -- truevarbinary.is(bin_hex) -- truevarbinary.is(100) -- falsevarbinary.is('data') -- false-- Check varbinary objects equalityprint(bin == varbinary.new('data')) -- trueprint(bin == 'data') -- trueprint(bin ~= 'data1') -- trueprint(bin_hex ~= '\xFF\xFE') -- false-- Check varbinary objects lengthprint(#bin) -- 4print(#bin_hex) -- 2-- Print string representationprint(tostring(bin)) -- datalocal bin2 = varbinary.new(ffi.cast('const char *', 'data'), 4)varbinary.is(bin2) -- trueprint(bin2) -- datalocal luatest = require('luatest')local test_group = luatest.group()test_group.test_varbinary = function()luatest.assert_equals(varbinary.is(bin), true)luatest.assert_equals(bin, 'data')luatest.assert_equals(#bin, 4)luatest.assert_equals(#varbinary.new('\xFF\xFE'), 2)end
Объекты varbinary сохраняют свой бинарный тип при кодировании
встроенными кодировщиками MsgPack и
YAML. Сравните со строками:
-
Строка в MsgPack:
tarantool> msgpack.encode('\xFF\xFE')---- "\xA2\xFF\xFE"... -
varbinaryв MsgPack:tarantool> msgpack.encode(varbinary.new('\xFF\xFE'))---- "\xC4\x02\xFF\xFE"... -
Строка в YAML:
tarantool> '\xFF\xFE'---- "\xFF\xFE"... -
varbinaryв YAML:tarantool> varbinary.new('\xFF\xFE')---- !!binary //4=...
Встроенные декодеры также по умолчанию декодируют поля бинарных данных
(поля с тегом binary в YAML и типом MP_BIN в MsgPack) в объекты
varbinary:
tarantool> varbinary.is(msgpack.decode('\xC4\x02\xFF\xFE'))---- true...tarantool> varbinary.is(yaml.decode('!!binary //4='))---- true...
Ниже приведен список функций, свойств и связанных объектов varbinary.
Имя | Назначение |
|---|---|
Проверяет, что аргумент является объектом | |
Создает объект | |
Проверяет равенство двух объектов | |
Возвращает длину бинарных данных в байтах | |
Возвращает бинарные данные в виде обычной строки |
Проверяет, что переданный объект является объектом varbinary.
Параметры:
object(object) — объект для проверки
Возвращает
Является ли переданный объект объектом типа varbinary
Тип возвращаемого значения
boolean
Пример:
Создает новый объект varbinary из переданной строки.
Параметры:
string(string) — строковый объект
Возвращает
Объект varbinary, содержащий строковые данные
Тип возвращаемого значения
cdata
Пример:
local bin = varbinary.new('data')local bin_hex = varbinary.new('\xFF\xFE')-- Check whether a value is a varbinary objectvarbinary.is(bin) -- truevarbinary.is(bin_hex) -- truevarbinary.is(100) -- falsevarbinary.is('data') -- false-- Check varbinary objects equalityprint(bin == varbinary.new('data')) -- trueprint(bin == 'data') -- trueprint(bin ~= 'data1') -- trueprint(bin_hex ~= '\xFF\xFE') -- false-- Check varbinary objects lengthprint(#bin) -- 4print(#bin_hex) -- 2-- Print string representationprint(tostring(bin)) -- datalocal bin2 = varbinary.new(ffi.cast('const char *', 'data'), 4)varbinary.is(bin2) -- trueprint(bin2) -- datalocal luatest = require('luatest')local test_group = luatest.group()test_group.test_varbinary = function()luatest.assert_equals(varbinary.is(bin), true)luatest.assert_equals(bin, 'data')luatest.assert_equals(#bin, 4)luatest.assert_equals(#varbinary.new('\xFF\xFE'), 2)end
Создает новый объект varbinary из указателя cdata и размера.
Параметры:
ptr(cdata) — указательcdatasize(number) — размер объекта в байтах
Возвращает
Объект varbinary, содержащий данные
Тип возвращаемого значения
cdata
Пример:
Проверяет равенство двух объектов varbinary или объекта varbinary и
строки. Объект varbinary равен другому объекту varbinary или строке,
если он содержит те же данные.
Определяет операторы == и ~= для объектов varbinary.
Тип возвращаемого значения
boolean
Пример:
Возвращает длину бинарных данных в байтах.
Определяет оператор # для объектов varbinary.
Тип возвращаемого значения
number
Пример:
Возвращает бинарные данные в виде обычной строки.
Определяет функцию tostring() для объектов varbinary.
Тип возвращаемого значения
string