- `full`: returns all headers with this name with all data (like task:get_header_full())
- `strong`: use case sensitive match when matching header's name]],
['args_schema'] = { T.string(),
- T.one_of({ T.literal("strong"), T.literal("full") }):optional() }
+ T.string():optional() }
},
-- Get list of received headers (returns list of tables)
['received'] = {
flags = url_flags_ts,
flags_mode = T.enum { 'explicit' }:optional(),
prefix = T.string():optional(),
- need_content = T.one_of({ T.boolean(), T.transform(T.string(), lua_util.toboolean) }):optional(),
- need_emails = T.one_of({ T.boolean(), T.transform(T.string(), lua_util.toboolean) }):optional(),
- need_images = T.one_of({ T.boolean(), T.transform(T.string(), lua_util.toboolean) }):optional(),
- ignore_redirected = T.one_of({ T.boolean(), T.transform(T.string(), lua_util.toboolean) }):optional(),
+ need_content = T.transform(T.boolean(), function(v)
+ return type(v) == "string" and lua_util.toboolean(v) or v
+ end):optional(),
+ need_emails = T.transform(T.boolean(), function(v)
+ return type(v) == "string" and lua_util.toboolean(v) or v
+ end):optional(),
+ need_images = T.transform(T.boolean(), function(v)
+ return type(v) == "string" and lua_util.toboolean(v) or v
+ end):optional(),
+ ignore_redirected = T.transform(T.boolean(), function(v)
+ return type(v) == "string" and lua_util.toboolean(v) or v
+ end):optional(),
} }
},
['specific_urls_filter_map'] = {
flags = url_flags_ts,
flags_mode = T.enum { 'explicit' }:optional(),
prefix = T.string():optional(),
- need_content = T.one_of({ T.boolean(), T.transform(T.string(), lua_util.toboolean) }):optional(),
- need_emails = T.one_of({ T.boolean(), T.transform(T.string(), lua_util.toboolean) }):optional(),
- need_images = T.one_of({ T.boolean(), T.transform(T.string(), lua_util.toboolean) }):optional(),
- ignore_redirected = T.one_of({ T.boolean(), T.transform(T.string(), lua_util.toboolean) }):optional(),
+ need_content = T.transform(T.boolean(), function(v)
+ return type(v) == "string" and lua_util.toboolean(v) or v
+ end):optional(),
+ need_emails = T.transform(T.boolean(), function(v)
+ return type(v) == "string" and lua_util.toboolean(v) or v
+ end):optional(),
+ need_images = T.transform(T.boolean(), function(v)
+ return type(v) == "string" and lua_util.toboolean(v) or v
+ end):optional(),
+ ignore_redirected = T.transform(T.boolean(), function(v)
+ return type(v) == "string" and lua_util.toboolean(v) or v
+ end):optional(),
} }
},
-- URLs filtered by flags
port = { schema = T.integer(), optional = true, default = 8080 }
})
- local ok, val = schema:transform({ name = "server" })
- assert_true(ok)
+ local val, err = schema:transform({ name = "server" })
+ assert_nil(err)
assert_equal(val.port, 8080)
end)
test("Optional with default in transform mode", function()
local schema = T.string():with_default("default")
- local ok, val = schema:transform(nil)
- assert_true(ok)
+ local val, err = schema:transform(nil)
+ assert_nil(err)
assert_equal(val, "default")
end)
end)
return val
end)
- local ok, val = schema:transform("42")
- assert_true(ok)
+ local val, err = schema:transform("42")
+ assert_nil(err)
assert_equal(val, 42)
end)
end)
-- Valid transform
- local ok, val = schema:transform("10")
- assert_true(ok)
+ local val, err = schema:transform("10")
+ assert_nil(err)
assert_equal(val, 10)
-- Transform result fails validation
- ok = schema:transform("-5")
- assert_false(ok)
+ val, err = schema:transform("-5")
+ assert_nil(val)
+ assert_not_nil(err)
end)
test("Transform only in transform mode", function()
assert_equal(val, 5)
-- Transform mode: applies transform
- ok, val = schema:transform(5)
- assert_true(ok)
+ val, err = schema:transform(5)
+ assert_nil(err)
assert_equal(val, 10)
end)
return val:upper()
end)
- local ok, val = schema:transform("hello")
- assert_true(ok)
+ local val, err = schema:transform("hello")
+ assert_nil(err)
assert_equal(val, "HELLO")
end)
end)