-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdistancelimit.lua
More file actions
87 lines (74 loc) · 2.5 KB
/
Copy pathdistancelimit.lua
File metadata and controls
87 lines (74 loc) · 2.5 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
-- luacheck: no max comment line length
---
-- @classmod DistanceLimit
local middleclass = require("middleclass")
local inspect = require("inspect")
local assertions = require("luatypechecks.assertions")
local checks = require("luatypechecks.checks")
local Nameable = require("luaserialization.nameable")
local Stringifiable = require("luaserialization.stringifiable")
---
-- @table instance
-- @tfield number maximal_distance
-- @tfield any suitable_value
local DistanceLimit = middleclass("DistanceLimit")
DistanceLimit:include(Nameable)
DistanceLimit:include(Stringifiable)
---
-- @function schema
-- @static
-- @treturn tab JSON Schema for this class
-- (see the [luaserialization](https://github.com/thewizardplusplus/luaserialization) library)
function DistanceLimit.static.schema()
return {
type = "object",
required = {"maximal_distance", "suitable_value"},
properties = {
maximal_distance = { type = "number" },
suitable_value = {},
},
}
end
---
-- @function from_options
-- @static
-- @tparam tab options constructor options conforming to the JSON Schema
-- returned by @{DistanceLimit.schema|DistanceLimit.schema()}
-- (see the [luaserialization](https://github.com/thewizardplusplus/luaserialization) library)
-- @treturn DistanceLimit
function DistanceLimit.static.from_options(options)
assertions.is_table(options)
return DistanceLimit:new(options.maximal_distance, options.suitable_value)
end
---
-- @function new
-- @tparam number maximal_distance
-- @tparam any suitable_value
-- @treturn DistanceLimit
function DistanceLimit:initialize(maximal_distance, suitable_value)
assertions.is_number(maximal_distance)
self.maximal_distance = maximal_distance
self.suitable_value = suitable_value
end
---
-- @treturn tab table with instance fields
-- (see the [luaserialization](https://github.com/thewizardplusplus/luaserialization) library)
function DistanceLimit:__data()
-- TODO: remove after resolving https://github.com/thewizardplusplus/luaserialization/issues/2
local suitable_value = self.suitable_value
if
checks.is_table(suitable_value)
and not checks.has_metamethods(suitable_value, {"__data"})
then
suitable_value = inspect(suitable_value)
end
return {
maximal_distance = self.maximal_distance,
suitable_value = suitable_value,
}
end
---
-- @function __tostring
-- @treturn string stringified table with instance fields
-- (see the [luaserialization](https://github.com/thewizardplusplus/luaserialization) library)
return DistanceLimit