#pragma once

namespace reanimated {

enum class ValueType {
  UndefinedType,
  NullType,
  BoolType,
  NumberType,
  StringType,
  RemoteObjectType, /* object that can be instantiated on host side and modified on the remote (worklet) side */
  MutableValueType, /* object with 'value' property that can be updated and read from any thread */
  HostFunctionType, /* function that will be executed asynchronously on the host runtime */
  WorkletFunctionType, /* function that gets run on the UI thread */
  FrozenObjectType, /* frozen object, can only be set and never modified */
  FrozenArrayType, /* frozen array, can only be set and never modified */
};

class ShareableValue;
class MutableValue;
class RemoteObject;
class NativeReanimatedModule;

}
