module AnyCable::Rails::ConnectionState::ClassMethods

def connection_state_attributes

def connection_state_attributes
  return @connection_state_attributes if instance_variable_defined?(:@connection_state_attributes)
  @connection_state_attributes =
    if superclass.respond_to?(:connection_state_attributes)
      superclass.connection_state_attributes.dup
    else
      []
    end
end

def state_attr_accessor(*names)

def state_attr_accessor(*names)
  names.each do |name|
    connection_state_attributes << name
    class_eval <<~RUBY, __FILE__, __LINE__ + 1
      def #{name}
        return @#{name} if instance_variable_defined?(:@#{name})
        @#{name} = AnyCable::Rails.deserialize(__cstate__["#{name}"], json: true) if anycabled?
      end
      def #{name}=(val)
        __cstate__["#{name}"] = AnyCable::Rails.serialize(val, json: true) if anycabled?
        instance_variable_set(:@#{name}, val)
      end
    RUBY
  end
end