@@ -97,10 +97,12 @@ let rec main () =
97
97
|> List. filter (fun (_ , (_ , _ , sdk , _ , _ , _ )) -> sdk)
98
98
|> List. iter gen_http_action ;
99
99
100
- let cmdlets =
101
- classes |> List. filter generated |> List. map gen_cmdlets |> List. concat
102
- in
103
- List. iter (fun x -> write_file x.filename x.content) cmdlets
100
+ let filtered_classes = List. filter generated classes in
101
+ let cmdlets = List. concat_map gen_cmdlets filtered_classes in
102
+
103
+ List. iter (fun x -> write_file x.filename x.content) cmdlets ;
104
+
105
+ filtered_classes |> List. iter gen_destructor
104
106
105
107
(* ***************)
106
108
(* Http actions *)
@@ -178,11 +180,6 @@ and gen_cmdlets obj =
178
180
; content=
179
181
gen_constructor obj classname (List. filter is_constructor messages)
180
182
}
181
- ; {
182
- filename= sprintf " Remove-Xen%s.cs" stem
183
- ; content=
184
- gen_destructor obj classname (List. filter is_destructor messages)
185
- }
186
183
; {
187
184
filename= sprintf " Remove-Xen%sProperty.cs" stem
188
185
; content= gen_remover obj classname (List. filter is_remover messages)
@@ -598,84 +595,35 @@ and convert_from_hashtable fname ty =
598
595
(* ***********************************)
599
596
(* Print function for Remove-XenFoo *)
600
597
(* ***********************************)
601
- and gen_destructor obj classname messages =
602
- match messages with
598
+
599
+ and gen_destructor obj =
600
+ let {name= classname; messages; _} = obj in
601
+ let destructors = List. filter is_destructor messages in
602
+ match destructors with
603
603
| [] ->
604
- " "
604
+ ()
605
605
| [x] ->
606
- let cut_message_name x = cut_msg_name (pascal_case x.msg_name) " Remove" in
607
- let asyncMessages =
608
- List. map cut_message_name (List. filter (fun x -> x.msg_async) messages)
606
+ let json =
607
+ `O
608
+ [
609
+ (" type" , `String (qualified_class_name classname))
610
+ ; (" wire_class_name" , `String (exposed_class_name classname))
611
+ ; (" class_name" , `String (ocaml_class_to_csharp_class classname))
612
+ ; (" property" , `String (ocaml_class_to_csharp_property classname))
613
+ ; (" type_local" , `String (ocaml_class_to_csharp_local_var classname))
614
+ ; (" async" , `Bool x.msg_async)
615
+ ; (" has_uuid" , `Bool (has_uuid obj))
616
+ ; (" has_name" , `Bool (has_name obj))
617
+ ]
609
618
in
610
- sprintf
611
- " %s\n\n \
612
- using System;\n \
613
- using System.Collections;\n \
614
- using System.Collections.Generic;\n \
615
- using System.Management.Automation;\n \
616
- using XenAPI;\n\n \
617
- namespace Citrix.XenServer.Commands\n \
618
- {\n \
619
- \ [Cmdlet(VerbsCommon.Remove, \" Xen%s\" , SupportsShouldProcess = \
620
- true)]\n \
621
- \ [OutputType(typeof(%s))]%s\n \
622
- \ [OutputType(typeof(void))]\n \
623
- \ public class RemoveXen%s : XenServerCmdlet\n \
624
- \ {\n \
625
- \ #region Cmdlet Parameters\n\n \
626
- \ [Parameter]\n \
627
- \ public SwitchParameter PassThru { get; set; }\n \
628
- %s%s\n \
629
- \ #endregion\n\n \
630
- \ #region Cmdlet Methods\n\n \
631
- \ protected override void ProcessRecord()\n \
632
- \ {\n \
633
- \ GetSession();\n\n \
634
- \ string %s = Parse%s();\n\n \
635
- \ %s\n\n \
636
- \ UpdateSessions();\n \
637
- \ }\n\n \
638
- \ #endregion\n\n \
639
- \ #region Private Methods\n \
640
- %s%s\n \
641
- \ #endregion\n \
642
- \ }\n \
643
- }\n "
644
- Licence. bsd_two_clause
645
- (ocaml_class_to_csharp_class classname)
646
- (qualified_class_name classname)
647
- ( if asyncMessages <> [] then
648
- " \n [OutputType(typeof(XenAPI.Task))]"
649
- else
650
- " "
651
- )
652
- (ocaml_class_to_csharp_class classname)
653
- (print_xenobject_params obj classname true true true )
654
- ( if asyncMessages <> [] then
655
- sprintf
656
- " \n \
657
- \ protected override bool GenerateAsyncParam\n \
658
- \ {\n \
659
- \ get { return true; }\n \
660
- \ }\n "
661
- else
662
- " "
663
- )
664
- (ocaml_class_to_csharp_local_var classname)
665
- (ocaml_class_to_csharp_property classname)
666
- (print_cmdlet_methods_remover classname x)
667
- (print_parse_xenobject_private_method obj classname true )
668
- (print_process_record_private_methods classname messages " Remove"
669
- " asyncpassthru"
619
+ render_file
620
+ ( " Remove-XenObject.mustache"
621
+ , sprintf " Remove-Xen%s.cs" (ocaml_class_to_csharp_class classname)
670
622
)
623
+ json templdir destdir
671
624
| _ ->
672
625
assert false
673
626
674
- and print_cmdlet_methods_remover classname message =
675
- let localVar = ocaml_class_to_csharp_local_var classname in
676
- let cut_message_name x = cut_msg_name (pascal_case x.msg_name) " Remove" in
677
- sprintf " ProcessRecord%s(%s);" (cut_message_name message) localVar
678
-
679
627
(* ****************************************)
680
628
(* Print function for Remove-XenFoo -Bar *)
681
629
(* ****************************************)
0 commit comments