let char_seq_item_to_raw_item ?(items_per_line=80) () =
let queue = Queue.create () in
Biocaml_transform.make ~name:"fasta_slicer" ()
~feed:(fun {header=hdr; sequence=seq} ->
Queue.enqueue queue (`header hdr);
let rec loop idx =
if idx + items_per_line >= String.length seq then (
Queue.enqueue queue
(`partial_sequence String.(sub seq idx (length seq - idx)));
) else (
Queue.enqueue queue
(`partial_sequence String.(sub seq idx items_per_line));
loop (idx + items_per_line);
) in
loop 0)
~next:(fun stopped ->
match Queue.dequeue queue with
| Some s -> `output s
| None -> if stopped then `end_of_stream else `not_ready)