1 // Copyright © 2021-present 650 Industries, Inc. (aka Expo) 2 3 #pragma once 4 5 #include "CppType.h" 6 #include "FrontendConverter.h" 7 #include "ExpectedType.h" 8 9 #include <fbjni/fbjni.h> 10 11 #include <memory> 12 #include <unordered_map> 13 14 namespace jni = facebook::jni; 15 16 namespace expo { 17 /** 18 * Singleton registry used to store all basic converters. 19 */ 20 class FrontendConverterProvider { 21 public: 22 /** 23 * Gets a singleton instance. 24 */ 25 static std::shared_ptr<FrontendConverterProvider> instance(); 26 27 /** 28 * Creates converters. 29 */ 30 void createConverters(); 31 32 /** 33 * Obtains a converter for an expected type. 34 */ 35 std::shared_ptr<FrontendConverter> obtainConverter( 36 jni::local_ref<jni::JavaClass<ExpectedType>::javaobject> expectedType 37 ); 38 private: 39 FrontendConverterProvider() = default; 40 41 std::shared_ptr<FrontendConverter> obtainConverterForSingleType( 42 jni::local_ref<jni::JavaClass<SingleType>::javaobject> expectedType 43 ); 44 45 std::unordered_map<CppType, std::shared_ptr<FrontendConverter>> simpleConverters; 46 }; 47 } // namespace expo 48