// AUTOGENERATED FILE - DO NOT MODIFY!
// This file generated by Djinni from enum.djinni

#pragma once

#include "djinni_support.hpp"
#include "enum_usage_interface.hpp"

namespace djinni_generated {

class NativeEnumUsageInterface final : ::djinni::JniInterface<::testsuite::EnumUsageInterface, NativeEnumUsageInterface> {
public:
    using CppType = std::shared_ptr<::testsuite::EnumUsageInterface>;
    using CppOptType = std::shared_ptr<::testsuite::EnumUsageInterface>;
    using JniType = jobject;

    using Boxed = NativeEnumUsageInterface;

    ~NativeEnumUsageInterface();

    static CppType toCpp(JNIEnv* jniEnv, JniType j) { return ::djinni::JniClass<NativeEnumUsageInterface>::get()._fromJava(jniEnv, j); }
    static ::djinni::LocalRef<JniType> fromCppOpt(JNIEnv* jniEnv, const CppOptType& c) { return {jniEnv, ::djinni::JniClass<NativeEnumUsageInterface>::get()._toJava(jniEnv, c)}; }
    static ::djinni::LocalRef<JniType> fromCpp(JNIEnv* jniEnv, const CppType& c) { return fromCppOpt(jniEnv, c); }

private:
    NativeEnumUsageInterface();
    friend ::djinni::JniClass<NativeEnumUsageInterface>;
    friend ::djinni::JniInterface<::testsuite::EnumUsageInterface, NativeEnumUsageInterface>;

    class JavaProxy final : ::djinni::JavaProxyHandle<JavaProxy>, public ::testsuite::EnumUsageInterface
    {
    public:
        JavaProxy(JniType j);
        ~JavaProxy();

        ::testsuite::color e(::testsuite::color e) override;
        std::experimental::optional<::testsuite::color> o(std::experimental::optional<::testsuite::color> o) override;
        std::vector<::testsuite::color> l(const std::vector<::testsuite::color> & l) override;
        std::unordered_set<::testsuite::color> s(const std::unordered_set<::testsuite::color> & s) override;
        std::unordered_map<::testsuite::color, ::testsuite::color> m(const std::unordered_map<::testsuite::color, ::testsuite::color> & m) override;

    private:
        friend ::djinni::JniInterface<::testsuite::EnumUsageInterface, ::djinni_generated::NativeEnumUsageInterface>;
    };

    const ::djinni::GlobalRef<jclass> clazz { ::djinni::jniFindClass("com/dropbox/djinni/test/EnumUsageInterface") };
    const jmethodID method_e { ::djinni::jniGetMethodID(clazz.get(), "e", "(Lcom/dropbox/djinni/test/Color;)Lcom/dropbox/djinni/test/Color;") };
    const jmethodID method_o { ::djinni::jniGetMethodID(clazz.get(), "o", "(Lcom/dropbox/djinni/test/Color;)Lcom/dropbox/djinni/test/Color;") };
    const jmethodID method_l { ::djinni::jniGetMethodID(clazz.get(), "l", "(Ljava/util/ArrayList;)Ljava/util/ArrayList;") };
    const jmethodID method_s { ::djinni::jniGetMethodID(clazz.get(), "s", "(Ljava/util/HashSet;)Ljava/util/HashSet;") };
    const jmethodID method_m { ::djinni::jniGetMethodID(clazz.get(), "m", "(Ljava/util/HashMap;)Ljava/util/HashMap;") };
};

}  // namespace djinni_generated
