]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/JSONSchema.pm
fix typo
[pve-common.git] / src / PVE / JSONSchema.pm
index f70bf97e9834992c7345204c716d65711c3c1b0d..debbbb5904004936e4553217fecc3f363db14a05 100644 (file)
@@ -229,7 +229,9 @@ my $ipv4_mask_hash = {
     '255.255.255.224' => 27,
     '255.255.255.240' => 28,
     '255.255.255.248' => 29,
-    '255.255.255.252' => 30
+    '255.255.255.252' => 30,
+    '255.255.255.254' => 31,
+    '255.255.255.255' => 32,
 };
 
 register_format('ipv4mask', \&pve_verify_ipv4mask);
@@ -643,6 +645,9 @@ sub check_type {
                return undef;
            }
            return 1;
+       } elsif ($type eq 'string' && $vt eq 'Regexp') {
+           # qr// regexes can be used as strings and make sense for format=regex
+           return 1;
        } else {
            if ($vt) {
                add_error($errors, $path, "type check ('$type') failed - got $vt");
@@ -715,7 +720,7 @@ sub check_object {
                    check_prop($value, $requires, $path, $errors);
                } elsif (!defined($value->{$requires})) {
                    add_error($errors, $path ? "$path.$requires" : $requires, 
-                             "missing property - '$newpath' requiers this property");
+                             "missing property - '$newpath' requires this property");
                }
            }
 
@@ -978,6 +983,11 @@ my $default_schema_noref = {
            optional => 1,
            description => "This provides a description of the purpose the instance property. The value can be a string or it can be an object with properties corresponding to various different instance languages (with an optional default property indicating the default description).",
        },
+       verbose_description => {
+           type => "string",
+           optional => 1,
+           description => "This provides a more verbose description.",
+       },
        format_description => {
            type => "string",
            optional => 1,
@@ -1593,10 +1603,10 @@ sub print_property_string {
        }
     };
 
-    my $done = {};
+    my $done = { map { $_ => 1 } @$skip };
 
     my $cond_add_key = sub {
-       my ($key) = @_;
+       my ($key, $isdefault) = @_;
 
        return if $done->{$key}; # avoid duplicates
 
@@ -1628,11 +1638,15 @@ sub print_property_string {
        die "internal error" if defined($phash->{alias});
 
        my $value_str = &$format_value($key, $value, $phash->{format});
-       &$add_option_string("$key=${value_str}");
+       if ($isdefault) {
+           &$add_option_string($value_str);
+       } else {
+           &$add_option_string("$key=${value_str}");
+       }
     };
 
     # add default key first
-    &$cond_add_key($default_key) if defined($default_key);
+    &$cond_add_key($default_key, 1) if defined($default_key);
 
     # add required keys first
     foreach my $key (sort keys %$data) {
@@ -1651,6 +1665,8 @@ sub print_property_string {
 sub schema_get_type_text {
     my ($phash) = @_;
 
+    my $type = $phash->{type} || 'string';
+
     if ($phash->{typetext}) {
        return $phash->{typetext};
     } elsif ($phash->{format_description}) {
@@ -1659,15 +1675,17 @@ sub schema_get_type_text {
        return "(" . join(' | ', sort @{$phash->{enum}}) . ")";
     } elsif ($phash->{pattern}) {
        return $phash->{pattern};
-    } elsif ($phash->{type} eq 'integer' || $phash->{type} eq 'number') {
+    } elsif ($type eq 'integer' || $type eq 'number') {
+       # NOTE: always access values as number (avoid converion to string)
        if (defined($phash->{minimum}) && defined($phash->{maximum})) {
-           return "$phash->{type} ($phash->{minimum} - $phash->{maximum})";
+           return "$type (" . ($phash->{minimum} + 0) . " - " .
+               ($phash->{maximum} + 0) . ")";
        } elsif (defined($phash->{minimum})) {
-           return "$phash->{type} ($phash->{minimum} - N)";
+           return "$type (" . ($phash->{minimum} + 0) . " - N)";
        } elsif (defined($phash->{maximum})) {
-           return "$phash->{type} (-N - $phash->{maximum})";
+           return "$type (-N - " . ($phash->{maximum} + 0) . ")";
        }
-    } elsif ($phash->{type} eq 'string') {
+    } elsif ($type eq 'string') {
        if (my $format = $phash->{format}) {
            $format = get_format($format) if ref($format) ne 'HASH';
            if (ref($format) eq 'HASH') {
@@ -1676,8 +1694,6 @@ sub schema_get_type_text {
        }
     }
 
-    my $type = $phash->{type} || 'string';
-
     return $type;
 }