diff options
Diffstat (limited to 'libs/uvl')
-rw-r--r-- | libs/uvl/luasrc/uvl.lua | 27 | ||||
-rw-r--r-- | libs/uvl/luasrc/uvl/errors.lua | 1 | ||||
-rw-r--r-- | libs/uvl/root/lib/uci/schema/meta/schema | 36 |
3 files changed, 64 insertions, 0 deletions
diff --git a/libs/uvl/luasrc/uvl.lua b/libs/uvl/luasrc/uvl.lua index 683d7a9bb..8275dbbe1 100644 --- a/libs/uvl/luasrc/uvl.lua +++ b/libs/uvl/luasrc/uvl.lua @@ -334,6 +334,30 @@ function UVL._validate_option( self, option, nodeps ) return false, option:error(ERR.OPT_DATATYPE(option, dt)) end end + + if option:scheme('minlength') then + if #val < option:scheme('minlength') then + return false, option:error(ERR.OPT_RANGE(option)) + end + end + + if option:scheme('maxlength') then + if #val > option:scheme('maxlength') then + return false, option:error(ERR.OPT_RANGE(option)) + end + end + + if option:scheme('minimum') then + if val < option:scheme('minimum') then + return false, option:error(ERR.OPT_RANGE(option)) + end + end + + if option:scheme('maximum') then + if val > option:scheme('maximum') then + return false, option:error(ERR.OPT_RANGE(option)) + end + end if not nodeps then local ok, err = dependencies.check( self, option ) @@ -582,6 +606,9 @@ function UVL._parse_var(self, scheme, k, v) t.valueof = type(v2) == "table" and v2 or {v2} elseif k == "required" then t[k] = _bool(v2) + elseif k == "minlength" or k == "maxlength" + or k == "minimum" or k == "maximum" then + t[k] = tonumber(v2) else t[k] = t[k] or v2 end diff --git a/libs/uvl/luasrc/uvl/errors.lua b/libs/uvl/luasrc/uvl/errors.lua index 242965ddc..9cd8d19cf 100644 --- a/libs/uvl/luasrc/uvl/errors.lua +++ b/libs/uvl/luasrc/uvl/errors.lua @@ -66,6 +66,7 @@ ERRCODES = { { 'OPT_NOTLIST', 'Option "%i" is defined as list but stored as plain value' }, { 'OPT_DATATYPE', 'Option "%i" has unknown datatype "%1"' }, { 'OPT_NOTFOUND', 'Option "%p.%s.%o" not found in config' }, + { 'OPT_RANGE', 'Option "%p.%s.%o" is not within the specified range' }, { 'DEP_NOTEQUAL', 'Dependency (%1) failed:\nOption "%i" is not eqal "%2"' }, { 'DEP_NOVALUE', 'Dependency (%1) failed:\nOption "%i" has no value' }, diff --git a/libs/uvl/root/lib/uci/schema/meta/schema b/libs/uvl/root/lib/uci/schema/meta/schema index 3b78725d5..a4fed422d 100644 --- a/libs/uvl/root/lib/uci/schema/meta/schema +++ b/libs/uvl/root/lib/uci/schema/meta/schema @@ -275,6 +275,42 @@ config variable option type 'variable' option datatype 'string' option required false + +# Variable minimum length (schema.@variable.minlength) +config variable + option name 'minlength' + option title 'Minimum length of this variable' + option section 'schema.variable' + option type 'variable' + option datatype 'uint' + option required false + +# Variable maximum length (schema.@variable.minlength) +config variable + option name 'maxlength' + option title 'Maximum length of this variable' + option section 'schema.variable' + option type 'variable' + option datatype 'uint' + option required false + +# Variable minimum value (schema.@variable.minlength) +config variable + option name 'minimum' + option title 'Minimum value of this variable' + option section 'schema.variable' + option type 'variable' + option datatype 'integer' + option required false + +# Variable maximum value (schema.@variable.minlength) +config variable + option name 'maximum' + option title 'Maximum value of this variable' + option section 'schema.variable' + option type 'variable' + option datatype 'integer' + option required false # Variable validators (schema.@variable.validator) config variable |