in gems/aws-crt/lib/aws-crt/native.rb [77:107]
def self.attach_function(c_name, params, returns, options = {})
ruby_name = c_name.to_s.sub(/aws_crt_/, '').to_sym
raise_errors = options.fetch(:raise, true)
options.delete(:raise)
unless raise_errors
return super(ruby_name, c_name, params, returns, options)
end
bang_name = "#{ruby_name}!"
super(ruby_name, c_name, params, returns, options)
alias_method(bang_name, ruby_name)
define_method(ruby_name) do |*args, &block|
res = public_send(bang_name, *args, &block)
return unless res
Errors.raise_last_error if res.is_a?(Integer) && res != 0
Errors.raise_last_error if res.is_a?(FFI::Pointer) && res.null?
res
end
module_function ruby_name
module_function bang_name
end