open Lwt.Infix open Markup open Xml (** [next stream] is a promise containing a full stanza of the fragments of [stream]. *) let next (stream : (signal, async) stream) : (signal, sync) stream Lwt.t = let traverse_stanza depth fragment = let depth = match fragment with | `Start_element _ -> depth + 1 | `End_element -> depth - 1 | _ -> depth in ([fragment], if depth = 0 then None else Some depth) in transform traverse_stanza 0 stream |> Markup_lwt.load (** [get stream] is a promise containing a single Xml element of [stream]. *) let get (stream : (signal, async) stream) : element Lwt.t = next stream >>= tree