class Playwright::PlaywrightApi::ApiImplementationWrapper

def detect_class_for(klass)

def detect_class_for(klass)
  class_name = expected_class_name_for(klass)
  if ::Playwright.const_defined?(class_name)
    ::Playwright.const_get(class_name)
  else
    nil
  end
end

def expected_class_name_for(klass)

def expected_class_name_for(klass)
  # KeyboardImpl -> Keyboard
  # MouseImpl -> Mouse
  klass.name[0...-4].split("::").last
end

def initialize(impl)

def initialize(impl)
  impl_class_name = impl.class.name
  unless impl_class_name.end_with?("Impl")
    raise "#{impl_class_name} is not Impl"
  end
  @impl = impl
end

def wrap

def wrap
  api_class = detect_class_for(@impl.class)
  if api_class
    api_class.new(@impl)
  else
    raise NotImplementedError.new("Playwright::#{expected_class_name_for(@impl.class)} is not implemented")
  end
end