114c0f05dSŁukasz Kosmaty // Copyright © 2021-present 650 Industries, Inc. (aka Expo)
214c0f05dSŁukasz Kosmaty 
314c0f05dSŁukasz Kosmaty #pragma once
414c0f05dSŁukasz Kosmaty 
514c0f05dSŁukasz Kosmaty #include <jsi/jsi.h>
614c0f05dSŁukasz Kosmaty 
714c0f05dSŁukasz Kosmaty #include <memory>
814c0f05dSŁukasz Kosmaty 
914c0f05dSŁukasz Kosmaty namespace jsi = facebook::jsi;
1014c0f05dSŁukasz Kosmaty 
1114c0f05dSŁukasz Kosmaty namespace expo {
1214c0f05dSŁukasz Kosmaty /**
13*879827bbSŁukasz Kosmaty  * An interface for classes which wrap `jsi::Object`.
1414c0f05dSŁukasz Kosmaty  */
1514c0f05dSŁukasz Kosmaty class JSIObjectWrapper {
1614c0f05dSŁukasz Kosmaty public:
1714c0f05dSŁukasz Kosmaty   /**
18*879827bbSŁukasz Kosmaty    * @return a pointer to the underlying `jsi::Object`.
1914c0f05dSŁukasz Kosmaty    */
2014c0f05dSŁukasz Kosmaty   virtual std::shared_ptr<jsi::Object> get() = 0;
2114c0f05dSŁukasz Kosmaty };
2214c0f05dSŁukasz Kosmaty 
2314c0f05dSŁukasz Kosmaty /**
24*879827bbSŁukasz Kosmaty  * An interface for classes which wrap `jsi::Value`.
2514c0f05dSŁukasz Kosmaty  */
2614c0f05dSŁukasz Kosmaty class JSIValueWrapper {
2714c0f05dSŁukasz Kosmaty public:
2814c0f05dSŁukasz Kosmaty   /**
29*879827bbSŁukasz Kosmaty    * @return a pointer to the underlying `jsi::Value`.
3014c0f05dSŁukasz Kosmaty    */
3114c0f05dSŁukasz Kosmaty   virtual std::shared_ptr<jsi::Value> get() = 0;
3214c0f05dSŁukasz Kosmaty };
33*879827bbSŁukasz Kosmaty 
34*879827bbSŁukasz Kosmaty /**
35*879827bbSŁukasz Kosmaty  * An interface for classes which wrap `jsi::Function`.
36*879827bbSŁukasz Kosmaty  */
37*879827bbSŁukasz Kosmaty class JSIFunctionWrapper {
38*879827bbSŁukasz Kosmaty public:
39*879827bbSŁukasz Kosmaty   /**
40*879827bbSŁukasz Kosmaty    * @return a pointer to the underlying `jsi::Function`.
41*879827bbSŁukasz Kosmaty    */
42*879827bbSŁukasz Kosmaty   virtual std::shared_ptr<jsi::Function> get() = 0;
43*879827bbSŁukasz Kosmaty };
4414c0f05dSŁukasz Kosmaty } // namespace expo
45