aboutsummaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorMarc Coquand <marc@mccd.space>2023-12-26 11:15:33 -0600
committerMarc Coquand <marc@mccd.space>2023-12-26 11:15:33 -0600
commitb826340d7536c2777fdcafb3bfcc6ebc8d8053ee (patch)
tree5eb2ba17a4c5edefb82bc32677c68bbf84968249 /bin
parentfc077e16adf2860af3d32a60cabd67f57bab0803 (diff)
downloadfixgen-b826340d7536c2777fdcafb3bfcc6ebc8d8053ee.tar.gz
fixgen-b826340d7536c2777fdcafb3bfcc6ebc8d8053ee.tar.bz2
fixgen-b826340d7536c2777fdcafb3bfcc6ebc8d8053ee.zip
Support output file
Diffstat (limited to 'bin')
-rw-r--r--bin/main.ml39
1 files changed, 34 insertions, 5 deletions
diff --git a/bin/main.ml b/bin/main.ml
index d644133..43ce56b 100644
--- a/bin/main.ml
+++ b/bin/main.ml
@@ -7,7 +7,26 @@ let parse (s : string) =
ast
-let fixgen content output_type () =
+let print_stdout = function
+ | [ (_, content) ] -> print_endline content
+ | list ->
+ list
+ |> List.iter (fun (name, content) ->
+ print_endline ("FILE NAME: " ^ name);
+ print_endline content)
+
+
+let file_name name file_format = name ^ "." ^ file_format
+
+let save_files file_format output_folder list =
+ list
+ |> List.iter (fun (name, content) ->
+ let file = open_out (output_folder ^ "/" ^ file_name name file_format) in
+ output_string file content;
+ close_out file)
+
+
+let fixgen content output_type output_folder =
let result = parse content in
let generate_output =
match output_type with
@@ -15,13 +34,18 @@ let fixgen content output_type () =
| "json" -> Fixture.json_of_generated_fixtures
| _ -> failwith "Unsupported output type, supported types are: json, csv"
in
+ let save_output =
+ match output_folder with
+ | "STDOUT" -> print_stdout
+ | s -> save_files output_type s
+ in
match result with
| Some ast ->
Ast_types.compile ast
- |> List.iter (fun (name, file) ->
+ |> List.map (fun (name, file) ->
let result = generate_output file in
- print_endline ("FILE NAME: " ^ name);
- print_endline result)
+ name, result)
+ |> save_output
| None -> print_endline "error"
@@ -31,12 +55,17 @@ let file =
(* TODO: Support option to set output folder *)
+let output_folder =
+ let doc = "Set output folder" in
+ Arg.(
+ value & opt string "STDOUT" & info [ "o"; "output-folder" ] ~docv:"OUTPUT FOLDER" ~doc)
+
let output_type =
let doc = "Set output file type, supported=csv" in
Arg.(value & opt string "csv" & info [ "f"; "file-type" ] ~docv:"FILE TYPE" ~doc)
-let fixgen_t = Term.(const fixgen $ file $ output_type $ const ())
+let fixgen_t = Term.(const fixgen $ file $ output_type $ output_folder)
let cmd = Cmd.v (Cmd.info "fixgen") fixgen_t
let () = exit (Cmd.eval cmd)