Define Schema
Primitives
lua
prism:string()
prism:number()
prism:boolean()
prism:enum()
prism:array()
prism:object()
prism:extends()
prism:union()Optional Field
Define an optional data type (not required)
lua
prism:[TYPE].optional()
-- Example
prism:string().optional()Nullable
Define a data type that can be NULL (from json.decode)
lua
prism:string().nullable()
prism:number().nullable()
prism:boolean().nullable()
prism:enum().nullable()
prism:array().nullable()
prism:object().nullable()Default
Define a default value before parsing, in case the incoming value is nil
lua
prism:string().default('Hello')
prism:number().default(55)
prism:boolean().default(true)
prism:enum().default('SOME_DEFAULT')
prism:array().default({})
prism:object().default({})Transform
Transform the value after validation is completed (this runs only when the schema is valid)
lua
prism:string().transform(function(value) return string.lower(value) end)
prism:number().transform(function(value) return value * 1.0 end)
prism:boolean().transform(function(value) return not value end)
prism:enum().transform(function(value) return string.upper(value) end)
prism:array().transform(function(value)
value[#value + 1] = 5
return value
end)
prism:object().transform(function(value)
value.validated = true
return value
end)Nullable, Default, Transform
- These methods are available starting from version 1.1.0
- They cannot be used with
Union
Strings
lua
prism:string().max(5)
prism:string().min(5)
prism:string().startsWith('https://')
prism:string().endsWith('/look-up-prism')
prism:string().email()
prism:string().identifier()Numbers
lua
prism:number().max(10)
prism:number().min(10)Booleans
lua
prism:boolean()Enums
lua
prism:enum({ 'NO_ENUM', 'YES_ENUM', 'WORK_ENUM' })
--- Can be any of the values defined hereArrays
lua
prism:array(prism:string()).max(50)
prism:array(prism:string()).min(50)
prism:array(
prism:object({
index = prism:number(),
value = prism:string()
})
)Objects
lua
prism:object(...).passthrough() --- Deprecated: use catchall instead
prism:object(...).catchall() -- Replacement for passthrough
prism:object({
type = prism:string(),
data = prism:object().catchall()
})Extends
lua
local person = prism:object({
name = prism:string()
})
local nameWithAge = prism:extends(person, {
age = prism:number()
})Unions
lua
prism:union({ prism:string(), prism:number() })
--- Can be any of the specified types (string or number)
--- Arrays are not allowed in unions