def self.builder_for_field_getter var_gen, name, type, direction
klass = case type.tag
when :void
if type.pointer?
RegularReturnValue
else
VoidReturnValue
end
when :interface
case type.interface.info_type
when :struct, :union, :interface, :object
WrappingReturnValue
else
RegularReturnValue
end
when :array
if type.zero_terminated?
WrappingReturnValue
else
case type.array_type
when :c
CArrayReturnValue
when :array
it = ReturnValue.new var_gen, name, type, direction
it.extend WithTypedContainerPostMethod
return it
else
WrappingReturnValue
end
end
when :glist, :gslist, :ghash
it = ReturnValue.new var_gen, name, type, direction
it.extend WithTypedContainerPostMethod
return it
when :utf8
Utf8ReturnValue
else
RegularReturnValue
end
klass.new var_gen, name, type, direction
end