use strict;
use warnings;
+use Storable;
use PVE::RESTHandler;
use PVE::API2;
-use JSON;
-my $tree = PVE::RESTHandler::api_dump_remove_refs(PVE::RESTHandler::api_dump('PVE::API2'));
-print to_json($tree, {pretty => 1, canonical => 1}) . "\n";
+sub remove_code_refs {
+ my ($tree) = @_;
+
+ my $class = ref($tree);
+ return if !$class;
+
+ if ($class eq 'ARRAY') {
+ foreach my $el (@$tree) {
+ remove_code_refs($el);
+ }
+ } elsif ($class eq 'HASH') {
+ foreach my $k (keys %$tree) {
+ if (my $itemclass = ref($tree->{$k})) {
+ if ($itemclass eq 'CODE') {
+ undef $tree->{$k};
+ } elsif ($itemclass eq 'Regexp') {
+ $tree->{$k} = "$tree"; # return string representation
+ } else {
+ remove_code_refs($tree->{$k});
+ }
+ }
+ }
+ }
+}
+
+my $root = {
+ path => '/',
+ text => '',
+ children => PVE::RESTHandler::api_dump('PVE::API2', undef, 1),
+ info => {
+ GET => PVE::API2->map_method_by_name('index'),
+ },
+};
+
+remove_code_refs($root);
+Storable::store_fd($root, \*STDOUT);
exit(0);