# typed: true

# DO NOT EDIT MANUALLY
# This is an autogenerated file for types exported from the `multipart-post` gem.
# Please instead update this file by running `bin/tapioca gem multipart-post`.

# source://multipart-post//lib/multipart/post/composite_read_io.rb#72
CompositeIO = Multipart::Post::CompositeReadIO

# source://multipart-post//lib/multipart/post/version.rb#7
module Multipart; end

# source://multipart-post//lib/multipart/post/version.rb#8
module Multipart::Post; end

# Concatenate together multiple IO objects into a single, composite IO object
# for purposes of reading as a single stream.
#
# @example
#   crio = CompositeReadIO.new(StringIO.new('one'),
#   StringIO.new('two'),
#   StringIO.new('three'))
#   puts crio.read # => "onetwothree"
#
# source://multipart-post//lib/multipart/post/composite_read_io.rb#28
class Multipart::Post::CompositeReadIO
  # Create a new composite-read IO from the arguments, all of which should
  # respond to #read in a manner consistent with IO.
  #
  # @return [CompositeReadIO] a new instance of CompositeReadIO
  #
  # source://multipart-post//lib/multipart/post/composite_read_io.rb#31
  def initialize(*ios); end

  # Read from IOs in order until `length` bytes have been received.
  #
  # source://multipart-post//lib/multipart/post/composite_read_io.rb#37
  def read(length = T.unsafe(nil), outbuf = T.unsafe(nil)); end

  # source://multipart-post//lib/multipart/post/composite_read_io.rb#54
  def rewind; end

  private

  # source://multipart-post//lib/multipart/post/composite_read_io.rb#65
  def advance_io; end

  # source://multipart-post//lib/multipart/post/composite_read_io.rb#61
  def current_io; end
end

# source://multipart-post//lib/multipart/post/multipartable.rb#23
module Multipart::Post::Multipartable
  # source://multipart-post//lib/multipart/post/multipartable.rb#38
  def initialize(path, params, headers = T.unsafe(nil), boundary = T.unsafe(nil)); end

  # Returns the value of attribute boundary.
  #
  # source://multipart-post//lib/multipart/post/multipartable.rb#61
  def boundary; end

  private

  # source://multipart-post//lib/multipart/post/multipartable.rb#66
  def symbolize_keys(hash); end

  class << self
    # source://multipart-post//lib/multipart/post/multipartable.rb#24
    def secure_boundary; end
  end
end

# source://multipart-post//lib/multipart/post/parts.rb#26
module Multipart::Post::Parts; end

# Represents the epilogue or closing boundary.
#
# source://multipart-post//lib/multipart/post/parts.rb#138
class Multipart::Post::Parts::EpiloguePart
  include ::Multipart::Post::Parts::Part

  # @return [EpiloguePart] a new instance of EpiloguePart
  #
  # source://multipart-post//lib/multipart/post/parts.rb#141
  def initialize(boundary); end
end

# Represents a part to be filled from file IO.
#
# source://multipart-post//lib/multipart/post/parts.rb#83
class Multipart::Post::Parts::FilePart
  include ::Multipart::Post::Parts::Part

  # @param boundary [String]
  # @param name [#to_s]
  # @param io [IO]
  # @param headers [Hash]
  # @return [FilePart] a new instance of FilePart
  #
  # source://multipart-post//lib/multipart/post/parts.rb#92
  def initialize(boundary, name, io, headers = T.unsafe(nil)); end

  # @param boundary [String]
  # @param name [#to_s]
  # @param filename [String]
  # @param type [String]
  # @param content_len [Integer]
  # @param opts [Hash]
  #
  # source://multipart-post//lib/multipart/post/parts.rb#107
  def build_head(boundary, name, filename, type, content_len, opts = T.unsafe(nil)); end

  # Returns the value of attribute length.
  #
  # source://multipart-post//lib/multipart/post/parts.rb#86
  def length; end
end

# Represents a parametric part to be filled with given value.
#
# source://multipart-post//lib/multipart/post/parts.rb#51
class Multipart::Post::Parts::ParamPart
  include ::Multipart::Post::Parts::Part

  # @param boundary [String]
  # @param name [#to_s]
  # @param value [String]
  # @param headers [Hash] Content-Type and Content-ID are used, if present.
  # @return [ParamPart] a new instance of ParamPart
  #
  # source://multipart-post//lib/multipart/post/parts.rb#58
  def initialize(boundary, name, value, headers = T.unsafe(nil)); end

  # @param boundary [String]
  # @param name [#to_s]
  # @param value [String]
  # @param headers [Hash] Content-Type is used, if present.
  #
  # source://multipart-post//lib/multipart/post/parts.rb#71
  def build_part(boundary, name, value, headers = T.unsafe(nil)); end

  # source://multipart-post//lib/multipart/post/parts.rb#63
  def length; end
end

# source://multipart-post//lib/multipart/post/parts.rb#27
module Multipart::Post::Parts::Part
  # source://multipart-post//lib/multipart/post/parts.rb#41
  def length; end

  # source://multipart-post//lib/multipart/post/parts.rb#45
  def to_io; end

  class << self
    # @return [Boolean]
    #
    # source://multipart-post//lib/multipart/post/parts.rb#37
    def file?(value); end

    # source://multipart-post//lib/multipart/post/parts.rb#28
    def new(boundary, name, value, headers = T.unsafe(nil)); end
  end
end

# Convenience methods for dealing with files and IO that are to be uploaded.
#
# source://multipart-post//lib/multipart/post/upload_io.rb#9
class Multipart::Post::UploadIO
  # Create an upload IO suitable for including in the params hash of a
  # Net::HTTP::Post::Multipart.
  #
  # Can take two forms. The first accepts a filename and content type, and
  # opens the file for reading (to be closed by finalizer).
  #
  # The second accepts an already-open IO, but also requires a third argument,
  # the filename from which it was opened (particularly useful/recommended if
  # uploading directly from a form in a framework, which often save the file to
  # an arbitrarily named RackMultipart file in /tmp).
  #
  # @example
  #   UploadIO.new("file.txt", "text/plain")
  #   UploadIO.new(file_io, "text/plain", "file.txt")
  # @return [UploadIO] a new instance of UploadIO
  #
  # source://multipart-post//lib/multipart/post/upload_io.rb#26
  def initialize(filename_or_io, content_type, filename = T.unsafe(nil), opts = T.unsafe(nil)); end

  # Returns the value of attribute content_type.
  #
  # source://multipart-post//lib/multipart/post/upload_io.rb#10
  def content_type; end

  # Returns the value of attribute io.
  #
  # source://multipart-post//lib/multipart/post/upload_io.rb#10
  def io; end

  # Returns the value of attribute local_path.
  #
  # source://multipart-post//lib/multipart/post/upload_io.rb#10
  def local_path; end

  # source://multipart-post//lib/multipart/post/upload_io.rb#52
  def method_missing(*args); end

  # Returns the value of attribute opts.
  #
  # source://multipart-post//lib/multipart/post/upload_io.rb#10
  def opts; end

  # Returns the value of attribute original_filename.
  #
  # source://multipart-post//lib/multipart/post/upload_io.rb#10
  def original_filename; end

  # @return [Boolean]
  #
  # source://multipart-post//lib/multipart/post/upload_io.rb#56
  def respond_to?(meth, include_all = T.unsafe(nil)); end

  class << self
    # @raise [ArgumentError]
    #
    # source://multipart-post//lib/multipart/post/upload_io.rb#46
    def convert!(io, content_type, original_filename, local_path); end
  end
end

# source://multipart-post//lib/multipart/post/version.rb#9
Multipart::Post::VERSION = T.let(T.unsafe(nil), String)

# source://multipart-post//lib/multipart/post/upload_io.rb#63
UploadIO = Multipart::Post::UploadIO
