sig
  module Spec :
    sig
      type 'a t
      val empty : unit -> [ `Args ] Tws_prot.Pickler.Spec.t
      val wrap :
        'Tws_prot.Pickler.Spec.t ->
        ('-> 'a) -> 'Tws_prot.Pickler.Spec.t
      val ( ++ ) :
        'Tws_prot.Pickler.Spec.t ->
        'Tws_prot.Pickler.Spec.t -> ('a * 'b) Tws_prot.Pickler.Spec.t
      val ( $ ) : '-> '-> 'a * 'b
      val unit : unit Tws_prot.Val_type.t
      val string : string Tws_prot.Val_type.t
      val int : int Tws_prot.Val_type.t
      val int64 : int64 Tws_prot.Val_type.t
      val float : float Tws_prot.Val_type.t
      val bool : bool Tws_prot.Val_type.t
      val bools : bool Tws_prot.Val_type.t
      val stamp : Core.Std.Time.t Tws_prot.Val_type.t
      val time : Core.Std.Time.t Tws_prot.Val_type.t
      val date : Core.Std.Date.t Tws_prot.Val_type.t
      val zone : Core.Std.Time.Zone.t Tws_prot.Val_type.t
      type 'a value
      val sequence :
        ?sep:char ->
        'Tws_prot.Val_type.t -> 'a list Tws_prot.Pickler.Spec.value
      val required : 'Tws_prot.Val_type.t -> 'Tws_prot.Pickler.Spec.value
      val optional :
        ?default_on_none:Tws_prot.raw_tws ->
        'Tws_prot.Val_type.t -> 'a option Tws_prot.Pickler.Spec.value
      val skipped_if_none :
        'Tws_prot.Val_type.t -> 'a option Tws_prot.Pickler.Spec.value
      val skipped : 'Tws_prot.Pickler.Spec.value
      val tws_data : Tws_prot.raw_tws Tws_prot.Pickler.Spec.value
      val value :
        'Tws_prot.Pickler.Spec.value -> 'Tws_prot.Pickler.Spec.t
      val fields_value :
        'Tws_prot.Pickler.Spec.value ->
        'accum Tws_prot.Pickler.Spec.t ->
        ('b, 'c) Core.Std.Field.t -> ('accum * 'a) Tws_prot.Pickler.Spec.t
    end
  type 'a t
  val create :
    ?buf_size:int ->
    ?name:string -> 'Tws_prot.Pickler.Spec.t -> 'Tws_prot.Pickler.t
  val run : 'Tws_prot.Pickler.t -> '-> Tws_prot.raw_tws
end