# typed: strong module ModuleClassMethodsAsInstanceMethods

# Sorbet does not understand the ClassMethods modules are actually defining
# class methods. Hence this module redefines some top level class methods as
# instance methods. Sigs are copied from
# https://github.com/sorbet/sorbet/blob/f9380ec833047a834bbaca1eb3502ae96a0e4394/rbi/core/module.rbi
include Kernel

sig do
  params(
      arg0: T.any(Symbol, String),
  )
  .returns(T.untyped)
end
def class_variable_get(arg0); end

sig do
  params(
      arg0: T.any(Symbol, String),
      arg1: BasicObject,
  )
  .returns(T.untyped)
end
def class_variable_set(arg0, arg1); end

sig {returns(String)}
def name(); end

end

module Redcord::RedisConnection::ClassMethods

include ModuleClassMethodsAsInstanceMethods

end

module Redcord::RedisConnection::InstanceMethods

include Kernel

end

module Redcord::Attribute::ClassMethods

include Redcord::Serializer::ClassMethods
# from inherenting T::Struct
def prop(name, type, options={}); end

end

module Redcord::TTL::ClassMethods

include Redcord::Serializer::ClassMethods

end

module Redcord::Actions::ClassMethods

include Kernel
include Redcord::RedisConnection::ClassMethods
include Redcord::Serializer::ClassMethods

end

module Redcord::Actions::InstanceMethods

include Kernel
include Redcord::RedisConnection::InstanceMethods

sig {returns(String)}
def to_json; end

sig {returns(T::Hash[String, T.untyped])}
def serialize; end

end

module Redcord::Base

include Redcord::Actions::InstanceMethods
extend Redcord::Serializer::ClassMethods

mixes_in_class_methods(Redcord::TTL::ClassMethods)

end

module Redcord::Serializer::ClassMethods

include ModuleClassMethodsAsInstanceMethods

  # from inherenting T::Struct
  def from_hash(args); end
  def props; end

end