]> git.proxmox.com Git - pve-common.git/blobdiff - src/PVE/PodParser.pm
schema_get_type_text: return format_description if available
[pve-common.git] / src / PVE / PodParser.pm
index eb443bd150713b33afddc40a14c96882a8a2d629..4f2868a0f6f3e427cae85bf0a93696298deb4c4b 100644 (file)
@@ -49,8 +49,12 @@ sub generate_typetext {
     my $typetext = '';
     my (@optional, @required);
     foreach my $key (sort keys %$schema) {
-       next if !$schema->{$key}->{format_description} &&
-               !$schema->{$key}->{typetext};
+       my $entry = $schema->{$key};
+       next if $entry->{alias};
+       next if !$entry->{format_description} &&
+               !$entry->{typetext} &&
+               !$entry->{enum} &&
+               $entry->{type} ne 'boolean';
        if ($schema->{$key}->{optional}) {
            push @optional, $key;
        } else {
@@ -62,11 +66,21 @@ sub generate_typetext {
        my ($key) = @_;
        $typetext .= $pre;
        my $entry = $schema->{$key};
-       if (my $desc = $entry->{format_description}) {
+       if (my $alias = $entry->{alias}) {
+           $key = $alias;
+           $entry = $schema->{$key};
+       }
+       if (!defined($entry->{typetext})) {
            $typetext .= $entry->{default_key} ? "[$key=]" : "$key=";
+       }
+       if (my $desc = $entry->{format_description}) {
            $typetext .= "<$desc>";
        } elsif (my $text = $entry->{typetext}) {
            $typetext .= $text;
+       } elsif (my $enum = $entry->{enum}) {
+           $typetext .= '<' . join('|', @$enum) . '>';
+       } elsif ($entry->{type} eq 'boolean') {
+           $typetext .= '<1|0>';
        } else {
            die "internal error: neither format_description nor typetext found";
        }
@@ -90,6 +104,8 @@ sub schema_get_type_text {
 
     if ($phash->{typetext}) {
        return $phash->{typetext};
+    } elsif ($phash->{format_description}) {
+       return "<$phash->{format_description}>";
     } elsif ($phash->{enum}) {
        return "(" . join(' | ', sort @{$phash->{enum}}) . ")";
     } elsif ($phash->{pattern}) {
@@ -116,7 +132,21 @@ sub schema_get_type_text {
     return $type;
 }
 
-# generta epop from JSON schema properties
+sub generate_property_text {
+    my ($schema) = @_;
+    my $data = '';
+    foreach my $key (sort keys %$schema) {
+       my $d = $schema->{$key};
+       next if $d->{alias};
+       my $desc = $d->{description};
+       my $typetext = schema_get_type_text($d);
+       $desc = 'No description available' if !$desc;
+       $data .= "=item $key: $typetext\n\n$desc\n\n";
+    }
+    return $data;
+}
+
+# generate pod from JSON schema properties
 sub dump_properties {
     my ($properties) = @_;
 
@@ -146,6 +176,15 @@ sub dump_properties {
        my $typetext = schema_get_type_text($d);
        $data .= "=item $base: $typetext\n\n";
        $data .= "$descr\n\n";
+
+       if ($d->{type} eq 'string') {
+           my $format = $d->{format};
+           if ($format && ref($format) eq 'HASH') {
+               $data .= "=over 1.1\n\n";
+               $data .= generate_property_text($format);
+               $data .= "=back\n\n";
+           }
+       }
     }
 
     $data .= "=back";