X-Git-Url: https://git.proxmox.com/?p=pve-common.git;a=blobdiff_plain;f=src%2FPVE%2FPodParser.pm;h=4f2868a0f6f3e427cae85bf0a93696298deb4c4b;hp=eb443bd150713b33afddc40a14c96882a8a2d629;hb=457c3fcb1e30d9e465cbaff9ea857d52a4a95e3c;hpb=2421fba133ffed89eb92e9c09be573d67cec9bc3 diff --git a/src/PVE/PodParser.pm b/src/PVE/PodParser.pm index eb443bd..4f2868a 100644 --- a/src/PVE/PodParser.pm +++ b/src/PVE/PodParser.pm @@ -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";