module Net::IMAP::Config::AttrTypeCoercion

def self.attr_accessor(attr, type: nil)

def self.attr_accessor(attr, type: nil)
  type = Types[type] or return
  define_method :"#{attr}=" do |val| super type[val] end
  define_method :"#{attr}?" do send attr end if type == Boolean
end

def self.included(mod)

def self.included(mod)
  mod.extend Macros
end

def self.safe(&b)

def self.safe(&b)
  case obj = b.call
  when Proc
    Ractor.shareable_proc(&obj)
  else
    Ractor.make_shareable obj
  end
end

def self.safe(&b)

def self.safe(&b)
  obj = nil.instance_eval(&b).freeze
  Ractor.make_shareable obj
end

def self.safe(&b) nil.instance_eval(&b).freeze end

def self.safe(&b) nil.instance_eval(&b).freeze end