let int_seq_item_to_raw_item ?(items_per_line=27) () =
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 l =
match List.split_n l items_per_line with
| finish, [] ->
Queue.enqueue queue (`partial_sequence finish);
| some, rest ->
Queue.enqueue queue (`partial_sequence some);
loop rest
in
loop seq)
~next:(fun stopped ->
match Queue.dequeue queue with
| Some s -> `output s
| None -> if stopped then `end_of_stream else `not_ready)