api_dump_remove_refs: prepare API tree for use with to_json($tree)
authorDietmar Maurer <dietmar@proxmox.com>
Fri, 18 May 2018 07:01:46 +0000 (09:01 +0200)
committerDietmar Maurer <dietmar@proxmox.com>
Fri, 18 May 2018 08:13:00 +0000 (10:13 +0200)
We want to use this with the extractapi.pl helper (pve-docs, pve-api-client).

src/PVE/RESTHandler.pm

index 3f5c732..5e70503 100644 (file)
@@ -139,6 +139,39 @@ sub api_dump_cleanup_tree {
 
 }
 
+# api_dump_remove_refs: prepare API tree for use with to_json($tree)
+sub api_dump_remove_refs {
+    my ($tree) = @_;
+
+    my $class = ref($tree);
+    return $tree if !$class;
+
+    if ($class eq 'ARRAY') {
+       my $res = [];
+       foreach my $el (@$tree) {
+           push @$res, api_dump_remove_refs($el);
+       }
+       return $res;
+    } elsif ($class eq 'HASH') {
+       my $res = {};
+       foreach my $k (keys %$tree) {
+           if (my $itemclass = ref($tree->{$k})) {
+               if ($itemclass eq 'CODE') {
+                   next if $k eq 'completion';
+               }
+               $res->{$k} = api_dump_remove_refs($tree->{$k});
+           } else {
+               $res->{$k} = $tree->{$k};
+           }
+       }
+       return $res;
+    } elsif ($class eq 'Regexp') {
+       return "$tree"; # return string representation
+    } else {
+       die "unknown class '$class'\n";
+    }
+}
+
 sub api_dump {
     my ($class, $prefix) = @_;