module Snapshot:sig..endwith type ('d, 'w) iobuf := ('d, 'w) t
snapshot t to get a snapshot of the front of the window, and then later
    restore that snapshot.  This is useful for speculatively parsing, and then rewinding
    when there isn't enough data to finish.
    Using a snapshot with a different iobuf, even a sub iobuf of the snapshotted one, has
    unspecified results.  An exception may be raised, or a silent error may occur.
    However, the safety guarantees of the iobuf will not be violated, i.e., the attempt
    will not enlarge the limits of the subject iobuf.
type t 
val restore : t -> ('a, Iobuf.seek) t -> unitval sexp_of_t : t -> Sexplib.Sexp.t