docs/feat: add stdin support via - filename
This commit is contained in:
31
bin/main.ml
31
bin/main.ml
@@ -14,7 +14,22 @@ let read_file filename =
|
||||
close_in ic;
|
||||
Bytes.unsafe_to_string s
|
||||
|
||||
let read_stdin () =
|
||||
let buf = Buffer.create 4096 in
|
||||
(try
|
||||
while true do
|
||||
Buffer.add_channel buf stdin 4096
|
||||
done
|
||||
with End_of_file -> ());
|
||||
Buffer.contents buf
|
||||
|
||||
let ical2rem (args : CommandLine.cli_args) ical_files =
|
||||
(* Validate: '-' (stdin) may appear at most once *)
|
||||
let stdin_count = List.length (List.filter (( = ) "-") ical_files) in
|
||||
if stdin_count > 1 then begin
|
||||
Printf.eprintf "Error: '-' (stdin) may appear at most once.\n";
|
||||
exit 1
|
||||
end;
|
||||
(* Validate --source with multiple files *)
|
||||
(match args.source with
|
||||
| Some _ when List.length ical_files > 1 ->
|
||||
@@ -31,11 +46,17 @@ let ical2rem (args : CommandLine.cli_args) ical_files =
|
||||
let good_rems =
|
||||
ListLabels.fold_left ~init:[] ical_files ~f:(fun good_rems_acc filename ->
|
||||
try
|
||||
let file_content = read_file filename in
|
||||
let basename =
|
||||
match args.source with
|
||||
| Some name -> name
|
||||
| None -> Filename.remove_extension (Filename.basename filename)
|
||||
let file_content, basename =
|
||||
if filename = "-" then
|
||||
( read_stdin (),
|
||||
match args.source with
|
||||
| Some name -> name
|
||||
| None -> "stdin" )
|
||||
else
|
||||
( read_file filename,
|
||||
match args.source with
|
||||
| Some name -> name
|
||||
| None -> Filename.remove_extension (Filename.basename filename) )
|
||||
in
|
||||
match Icalendar.parse file_content with
|
||||
| Error e ->
|
||||
|
||||
Reference in New Issue
Block a user