`type phantom` = `[`

`|` ``New_group_point`

`]```
`type -'rw t``= (phantom, 'rw) t```
`include sig ... end`
`val t_of_sexp : (Base.Sexp.t ‑> 'rw) ‑> Base.Sexp.t ‑> 'rw t`
`val sexp_of_t : ('rw ‑> Base.Sexp.t) ‑> 'rw t ‑> Base.Sexp.t`
`val message_type : char`
`val buffer_length : sources_count:int ‑> int`
`val of_iobuf_exn : ('rw, _) Core.Iobuf.t ‑> 'rw t`
`val write : group_id:Probe_id.t ‑> id:Probe_id.t ‑> name:string ‑> sources_count:int ‑> (Core.read_write, _) Core.Iobuf.t ‑> int`
`val create : group_id:Probe_id.t ‑> id:Probe_id.t ‑> name:string ‑> sources_count:int ‑> (Core.read_write, Core.Iobuf.seek) Core.Iobuf.t`
`val get_message_length : _ t ‑> int`
`val get_message_type : _ t ‑> char`
`val get_group_id : _ t ‑> Probe_id.t`
`val get_id : _ t ‑> Probe_id.t`
`val name_max_len : int`
`val get_name : _ t ‑> string`
`val get_name_zero : _ t ‑> ((Core.read, Core.Iobuf.no_seek) Core.Iobuf.t ‑> safe_pos:int ‑> safe_len:int ‑> 'a) ‑> 'a`
`val get_name_zero_padded : _ t ‑> ((Core.read, Core.Iobuf.no_seek) Core.Iobuf.t ‑> safe_pos:int ‑> safe_len:int ‑> 'a) ‑> 'a`
`val get_sources_count : _ t ‑> int`
`val get_sources_source_id : 'rw t ‑> count:int ‑> index:int ‑> Probe_id.t`

Beware: `count` is trusted. If it is wrong, this function could read the wrong data or segfault.

`val set_group_id : (Core.read_write, _) Core.Iobuf.t ‑> Probe_id.t ‑> unit`
`val set_id : (Core.read_write, _) Core.Iobuf.t ‑> Probe_id.t ‑> unit`
`val set_name : (Core.read_write, _) Core.Iobuf.t ‑> string ‑> unit`
`val set_name_zero : (Core.read_write, Core.Iobuf.seek) Core.Iobuf.t ‑> ('a ‑> (Core.read_write, Core.Iobuf.seek) Core.Iobuf.t ‑> unit) ‑> 'a ‑> unit`

`set_name_zero buf f a` calls `f` on `buf`, with the window adjusted to where `name` is. Even though `f` is given a seekable buffer, it must move nothing except the lower bound of the window past the data it wrote.

`val set_sources_source_id : (Core.read_write, _) Core.Iobuf.t ‑> count:int ‑> index:int ‑> Probe_id.t ‑> unit`

Beware: `count` is trusted. If it is wrong, this function could read the wrong data.

`val write_sources : (Core.read_write, _) Core.Iobuf.t ‑> count:int ‑> index:int ‑> source_id:Probe_id.t ‑> unit`

Beware: `count` is trusted. If it is wrong, this function could read the wrong data.

`val to_sub_iobuf : 'rw t ‑> ('rw, Core.Iobuf.seek) Core.Iobuf.t`
`module Unpacked : sig ... end`
`val to_unpacked : 'rw t ‑> Unpacked.t`
`val of_unpacked : Unpacked.t ‑> 'rw t`