docs/feat: add stdin support via - filename

This commit is contained in:
2026-05-24 18:49:30 +02:00
parent c55c9f9af4
commit af76d08c52
2 changed files with 40 additions and 6 deletions

View File

@@ -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 ->