# frozen_string_literal: true

require_relative "{{ gem_name_snake }}/version"
require_relative "{{ gem_name_snake }}/native"

# Top-level namespace for the {{ module_name }} Ruby binding.
#
# All type and function symbols are re-exported from the native extension
# loaded via `require_relative "{{ gem_name_snake }}/native"`. See
# {file:README.md} for usage examples and the upstream documentation
# for the full API reference.
module {{ module_name }}
  # Re-export all types and functions from native extension
{% if has_services %}
  require_relative "{{ gem_name_snake }}/service"
{% endif %}
end

# Bring top-level {{ module_name }} classes into the global namespace so callers
# (and the generated e2e suite) can reference them unqualified. The native
# extension has already been required above, so every type constant is defined
# under {{ module_name }} by this point.
{{ module_name }}.constants.each do |const_name|
  value = {{ module_name }}.const_get(const_name)
  ::Object.const_set(const_name, value) if value.is_a?(Module) && !::Object.const_defined?(const_name)
end
