Files
kong--kong/kong/db/schema/entity.lua
T
2026-07-13 12:32:21 +08:00

70 lines
1.5 KiB
Lua

local Schema = require("kong.db.schema")
local Entity = {}
local entity_errors = {
NO_NILABLE = "%s: Entities cannot have nilable types.",
NO_FUNCTIONS = "%s: Entities cannot have function types.",
MAP_KEY_STRINGS_ONLY = "%s: Entities map keys must be strings.",
}
-- Make records in Entities required by default,
-- so that they return their full structure on API queries.
local function make_records_required(field)
if field.required == nil then
field.required = true
end
for _, f in Schema.each_field(field) do
if f.type == "record" then
make_records_required(f)
end
end
end
function Entity.new_subschema(schema, key, definition)
make_records_required(definition)
definition.required = nil
return Schema.new_subschema(schema, key, definition)
end
function Entity.new(definition)
local self, err = Schema.new(definition)
if not self then
return nil, err
end
for name, field in self:each_field() do
if field.nilable then
return nil, entity_errors.NO_NILABLE:format(name)
end
if not field.abstract then
if field.type == "map" then
if field.keys.type ~= "string" then
return nil, entity_errors.MAP_KEY_STRINGS_ONLY:format(name)
end
elseif field.type == "record" then
make_records_required(field)
elseif field.type == "function" then
return nil, entity_errors.NO_FUNCTIONS:format(name)
end
end
end
self.new_subschema = Entity.new_subschema
return self
end
return Entity