LINUX.ORG.RU

Lua type checking library

 


0

1

Добрый вечер, ЛОР!
Пишем для своих целей, но может кому-то понадобится.

Что это: библиотека для проверки типов и размера (границ) переменных.
Зачем это: для проверки передаваемых значений извне в API, например.

Документация и примеры внутри.
Ссылка: https://pastebin.com/7dxm5J3u

Критика/идеи/предложения приветствуются.

Это не либа, это файлик, который на коленке пишется за 5 минут (без обид). И тайпчекать обычно требуется не просто значение/массив, а целый пакет.

function islower(s)
  return string.lower(s) == s
end
struct = {
  'array',
  {
    'struct',
    {
      a = 'string',
      b = 'bool',
      c = 'int32',
      d = {'array', 'number', maxlen=1000},
      e = 'any',
      f = {
        'variant',
        'string',
        {'array', 'string'},
      },
      g = {'string', check=islower},
    },
    userkeys = false,
  },
}
function (t)
  tcheck(t, struct)
end
anonymous ()
Ответ на: комментарий от Ceiling_QB

Кстати, под type checking в Lua обычно подразумевают валидацию аргументов функции + вызов ошибки с понятным текстом, если валидация не прошла (пример, промелькнувший на недавней конфе: https://github.com/tarantool/checks). Здесь же, похоже, просто валидация, и для этого есть либы с проверками, как у анона выше. Например, https://github.com/leafo/tableshape

Ceiling_QB ★★★★ ()
Последнее исправление: Ceiling_QB (всего исправлений: 1)
Ответ на: комментарий от Ceiling_QB

Не нашёл ни одной библиотеки, которую можно будет использовать примерно так при описании API методов:

local t, query, result = ...
return { 
      -- function: test(raz char 'default', dva int[0][10] ) --
      test = {{ raz = t.char('default'), dva = t.int[0][10] }, function(api, argv)
            query = api.db_link:query("select 1 as one, 'test' as two, ? as three, ? as four", argv.raz, argv.dva)
            return true, query[1]
      end},
}

annerleen ★★ ()