module Net::IMAP::Config::AttrAccessors

def self.attr_accessor(name) # :nodoc: internal API

:nodoc: internal API
def self.attr_accessor(name) # :nodoc: internal API
  name = name.to_sym
  def_delegators :data, name, :"#{name}="
end

def self.attributes

def self.attributes
  instance_methods.grep(/=\z/).map { _1.to_s.delete_suffix("=").to_sym }
end

def self.included(mod)

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

def self.struct # :nodoc: internal API

:nodoc: internal API
def self.struct # :nodoc: internal API
  unless defined?(self::Struct)
    const_set :Struct, Struct.new(*attributes)
  end
  self::Struct
end

def freeze

Freezes the internal attributes struct, in addition to +self+.
def freeze
  data.freeze
  super
end

def initialize # :notnew:

:notnew:
def initialize # :notnew:
  super()
  @data = AttrAccessors.struct.new
end

def initialize_clone(other)

def initialize_clone(other)
  super
  @data = other.data.clone
end

def initialize_dup(other)

def initialize_dup(other)
  super
  @data = other.data.dup
end