blob: f7bba620b299f9662197e6eecb4bf91a5a6f19ce [file] [log] [blame]
/*
* Copyright 2016 Google Inc. All Rights Reserved.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef COBALT_SCRIPT_JAVASCRIPTCORE_TYPE_TRAITS_H_
#define COBALT_SCRIPT_JAVASCRIPTCORE_TYPE_TRAITS_H_
#include "cobalt/script/callback_interface_traits.h"
#include "cobalt/script/javascriptcore/jsc_callback_function_holder.h"
#include "cobalt/script/javascriptcore/jsc_callback_interface_holder.h"
#include "cobalt/script/javascriptcore/jsc_object_handle_holder.h"
#include "cobalt/script/opaque_handle.h"
#include "cobalt/script/script_object.h"
namespace cobalt {
namespace script {
namespace javascriptcore {
template <typename T>
struct TypeTraits {
// The type to convert into from a JS Value in the bindings implementation.
typedef T ConversionType;
// Type type returned from a Cobalt implementation of a bound function.
typedef T ReturnType;
};
template <>
struct TypeTraits<OpaqueHandle> {
typedef JSCObjectHandleHolder ConversionType;
typedef const ScriptObject<OpaqueHandle>* ReturnType;
};
template <typename Sig>
struct TypeTraits<CallbackFunction<Sig> > {
typedef JSCCallbackFunctionHolder<CallbackFunction<Sig> > ConversionType;
typedef const ScriptObject<CallbackFunction<Sig> >* ReturnType;
};
template <typename CallbackInterface>
struct TypeTraits<CallbackInterfaceTraits<CallbackInterface> > {
typedef JSCCallbackInterfaceHolder<CallbackInterface> ConversionType;
typedef const ScriptObject<CallbackInterface>* ReturnType;
};
} // namespace javascriptcore
} // namespace script
} // namespace cobalt
#endif // COBALT_SCRIPT_JAVASCRIPTCORE_TYPE_TRAITS_H_