Checking number of parameters in bridge function argument
This commit is contained in:
@@ -113,6 +113,7 @@
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\GoAway.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\SayHi.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\TestBridge.cpp" />
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\TriggerEvent.cpp" />
|
||||
<ClCompile Include="Connector\Interface\ConnectorMenu.cpp" />
|
||||
<ClCompile Include="Connector\Interface\ConnectorPalette.cpp" />
|
||||
</ItemGroup>
|
||||
@@ -140,6 +141,7 @@
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\GoAway.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\SayHi.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\TestBridge.h" />
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\TriggerEvent.h" />
|
||||
<ClInclude Include="Connector\Interface\ConnectorMenu.h" />
|
||||
<ClInclude Include="Connector\Interface\ConnectorPalette.h" />
|
||||
<ClInclude Include="Connector\Version.h" />
|
||||
|
||||
@@ -143,6 +143,9 @@
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\Arg\SayHiArg.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test\Arg</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Connector\Interface\Browser\Bridge\Test\TriggerEvent.cpp">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="Connector\ConnectorResource.h">
|
||||
@@ -223,5 +226,8 @@
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\Arg\SayHiArg.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test\Arg</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Connector\Interface\Browser\Bridge\Test\TriggerEvent.h">
|
||||
<Filter>Connector\Interface\Browser\Bridge\Test</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
@@ -19,7 +19,7 @@ namespace {
|
||||
|
||||
///Serialisation field IDs
|
||||
static std::array fieldID = {
|
||||
Identity{"Id"},
|
||||
Identity{"id"},
|
||||
Identity{"count"},
|
||||
Identity{"thisIsABoolean"},
|
||||
};
|
||||
@@ -40,8 +40,8 @@ struct std::hash<connector::interfac::browser::bridge::ComplexType> {
|
||||
--------------------------------------------------------------------*/
|
||||
ComplexType::ComplexType() {
|
||||
//This is the required test values
|
||||
ID = String{std::hash<ComplexType>()(*this)} + " - I am a string";
|
||||
count = static_cast<int32_t>(std::hash<ComplexType>()(*this));
|
||||
ID = String{count} + " - I am a string";
|
||||
} //ComplexType::ComplexType
|
||||
|
||||
|
||||
@@ -56,9 +56,9 @@ bool ComplexType::fillInventory(Inventory& inventory) const {
|
||||
using enum Entry::Type;
|
||||
inventory.merge(Inventory{
|
||||
{
|
||||
{ fieldID[unID], unID, element },
|
||||
{ fieldID[countID], countID, element },
|
||||
{ fieldID[isTestID], isTestID, element },
|
||||
{ fieldID[unID], unID, element, !ID.empty() },
|
||||
{ fieldID[countID], countID, element, count != 0 },
|
||||
{ fieldID[isTestID], isTestID, element, testBool },
|
||||
},
|
||||
}.withType(&typeid(ComplexType)));
|
||||
return true;
|
||||
|
||||
@@ -7,7 +7,7 @@
|
||||
namespace connector::interfac::browser::bridge {
|
||||
|
||||
///Argument for the parameters of a test message
|
||||
using SayHiWrapper = speckle::interfac::browser::bridge::JSArgType<SayHiArg>;
|
||||
using SayHiWrapper = speckle::interfac::browser::bridge::JSArgType<SayHiArg, 3>;
|
||||
|
||||
/*!
|
||||
JS Function class to return a test message based on sample data
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#include "Active/Serialise/Item/Wrapper/ValueWrap.h"
|
||||
#include "Speckle/Interface/Browser/Bridge/BrowserBridge.h"
|
||||
|
||||
#include <array>
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace active::setting;
|
||||
using namespace connector::interfac::browser::bridge;
|
||||
|
||||
@@ -57,6 +57,12 @@ namespace speckle::interfac::browser::bridge {
|
||||
@return True if the argument contains an error
|
||||
*/
|
||||
bool hasError() const { return m_errorMessage.operator bool(); }
|
||||
/*!
|
||||
Get the number of parameters in the argument
|
||||
@return The number of parameters
|
||||
*/
|
||||
virtual uint32_t parameterCount() const { return 1; }
|
||||
|
||||
/*!
|
||||
Get any error message relating to the arguments
|
||||
@return The error message (nullopt if no errors occurred)
|
||||
@@ -92,7 +98,7 @@ namespace speckle::interfac::browser::bridge {
|
||||
};
|
||||
|
||||
///Definition of the argument for a JS callable method (enclosing the local function argument)
|
||||
template<typename T>
|
||||
template<typename T, uint32_t Params = 1>
|
||||
class JSArgType : public BridgeArgument {
|
||||
public:
|
||||
|
||||
@@ -115,6 +121,11 @@ namespace speckle::interfac::browser::bridge {
|
||||
*/
|
||||
JSArgType(const JSArgType& source) : BridgeArgument{source}, value{source.value} {}
|
||||
|
||||
/*!
|
||||
Get the number of parameters in the argument
|
||||
@return The number of parameters
|
||||
*/
|
||||
uint32_t parameterCount() const override { return Params; }
|
||||
/*!
|
||||
Fill an inventory with the cargo items
|
||||
@param inventory The inventory to receive the cargo items
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "Active/Serialise/Package/Wrapper/ValueSettingWrap.h"
|
||||
#include "Active/Serialise/JSON/JSONTransport.h"
|
||||
#include "Active/Utility/BufferIn.h"
|
||||
#include "Speckle/Utility/Exception.h"
|
||||
|
||||
using namespace active::serialise;
|
||||
using namespace active::serialise::json;
|
||||
@@ -133,22 +134,32 @@ std::unique_ptr<BridgeArgument> BridgeArgumentWrap::makeArgument(const String& m
|
||||
if (auto maker = m_argumentFactory.find(methodID); (maker != m_argumentFactory.end())) {
|
||||
if (auto result = reinterpret_cast<BridgeArgument*>(maker->second(methodID, requestID)); result != nullptr) {
|
||||
try {
|
||||
//The argument is passed as an array of stringified JSON - first unpack the array
|
||||
JSONTransport transport{Transport::Policy::verbose};
|
||||
//The argument is passed as an array of stringified JSON - first unpack the array
|
||||
JSONTransport transport;
|
||||
ValueSetting args;
|
||||
transport.receive(ValueSettingWrap{args}, Identity{}, argument);
|
||||
//Then unify the argument strings into a single JSON argument
|
||||
String unifiedArgument{"{"};
|
||||
int32_t argIndex = 0;
|
||||
bool isFirst = true;
|
||||
for (auto& arg : args.operator std::vector<active::utility::String>()) {
|
||||
if (isFirst)
|
||||
isFirst = false;
|
||||
else
|
||||
unifiedArgument += ",";
|
||||
unifiedArgument += "\"" + String{argIndex++} + "\":" + JSONTransport::convertFromJSONString(arg);
|
||||
if (args.size() != result->parameterCount())
|
||||
throw Exception{"Function called with wrong number of parameters"};
|
||||
String unifiedArgument;
|
||||
if (dynamic_cast<Package*>(result) != nullptr) {
|
||||
//Unify the argument strings into a single JSON argument
|
||||
unifiedArgument = "{";
|
||||
int32_t argIndex = 0;
|
||||
bool isFirst = true;
|
||||
for (auto& arg : args.operator std::vector<active::utility::String>()) {
|
||||
if (isFirst)
|
||||
isFirst = false;
|
||||
else
|
||||
unifiedArgument += ",";
|
||||
unifiedArgument += "\"" + String{argIndex++} + "\":" + JSONTransport::convertFromJSONString(arg);
|
||||
}
|
||||
unifiedArgument += "}";
|
||||
} else {
|
||||
//An item can only receive a single parameter
|
||||
if (args.size() > 1)
|
||||
throw Exception{"Function called with wrong number of parameters"};
|
||||
unifiedArgument = args;
|
||||
}
|
||||
unifiedArgument += "}";
|
||||
//And receive the unified argument into the method argument
|
||||
transport.receive(std::forward<Cargo&&>(*result), Identity{}, unifiedArgument);
|
||||
return std::unique_ptr<BridgeArgument>{result};
|
||||
|
||||
@@ -1,28 +0,0 @@
|
||||
#ifndef SPECKLE_INTERFACE_BRIDGE_FUNCTION_BINDING
|
||||
#define SPECKLE_INTERFACE_BRIDGE_FUNCTION_BINDING
|
||||
|
||||
#include "Speckle/Interface/Browser/JSBinding.h"
|
||||
|
||||
#ifdef ARCHICAD
|
||||
#include "Speckle/Serialise/JSBase/JSBaseTransport.h"
|
||||
|
||||
#include <Ref.hpp>
|
||||
#include <JSValues.hpp>
|
||||
#else
|
||||
#include "Active/Serialise/JSON/JSONTransport.h"
|
||||
#endif
|
||||
|
||||
namespace speckle::interfac::browser::bridge {
|
||||
|
||||
///Define the bridge binding protocols according to platform (argument/result serialisation and transport for (de)serialisation)
|
||||
#ifdef ARCHICAD
|
||||
//Archicad uses a proprietary JS::Base type for JS values
|
||||
using PlatformBinding = JSBinding<GS::Ref<JS::Base>, speckle::serialise::jsbase::JSBaseTransport>;
|
||||
#else
|
||||
//All others will use JSON (in a String)
|
||||
using PlatformBinding = JSBinding<active::utility::String, active::serialise::json::JSONTransport>;
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
#endif //SPECKLE_INTERFACE_BRIDGE_FUNCTION_BINDING
|
||||
@@ -38,12 +38,8 @@ std::unique_ptr<WrappedResultArg> GetCallResult::getResult(WrappedResultArg& arg
|
||||
if (!hasBridge())
|
||||
return nullptr;
|
||||
//Retrieve the requested result
|
||||
<<<<<<< Updated upstream
|
||||
using namespace json;
|
||||
auto result = m_bridge.releaseResult(argument);
|
||||
=======
|
||||
auto result = getBridge()->releaseResult(argument);
|
||||
>>>>>>> Stashed changes
|
||||
auto item = dynamic_cast<Cargo*>(result.get());
|
||||
if (!item)
|
||||
return nullptr;
|
||||
|
||||
@@ -27,17 +27,17 @@
|
||||
<ClInclude Include="Speckle\Event\Subscriber\SelectionSubscriber.h" />
|
||||
<ClInclude Include="Speckle\Event\Type\MenuEvent.h" />
|
||||
<ClInclude Include="Speckle\Event\Type\SelectionEvent.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\BridgeArgument.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\BridgeArgumentWrap.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\BridgeChild.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\BridgeMethod.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\BridgeMethodBase.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\BrowserBridge.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\Functions\ErrorReport.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\Functions\FunctionBinding.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\Functions\PlatformBinding.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\Functions\GetBindingsMethodNames.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\Functions\GetCallResult.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\Functions\RunMethod.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\JSArgumentBase.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\JSBridgeArgument.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\JSBridgeArgumentWrap.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\JSBridgeMethod.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\JSBridgeMethodBase.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\Functional.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\JSBinding.h" />
|
||||
<ClInclude Include="Speckle\Interface\Browser\JSFunction.h" />
|
||||
@@ -57,13 +57,13 @@
|
||||
<ClCompile Include="Speckle\Environment\Addon.cpp" />
|
||||
<ClCompile Include="Speckle\Event\Subscriber\MenuSubscriber.cpp" />
|
||||
<ClCompile Include="Speckle\Event\Subscriber\SelectionSubscriber.cpp" />
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\BridgeArgument.cpp" />
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\BridgeArgumentWrap.cpp" />
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\BrowserBridge.cpp" />
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\Functions\ErrorReport.cpp" />
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\Functions\GetBindingsMethodNames.cpp" />
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\Functions\GetCallResult.cpp" />
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\Functions\RunMethod.cpp" />
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\JSBridgeArgument.cpp" />
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\JSBridgeArgumentWrap.cpp" />
|
||||
<ClCompile Include="Speckle\Record\Credentials\Account.cpp" />
|
||||
<ClCompile Include="Speckle\Serialise\JSBase\JSBaseTransport.cpp" />
|
||||
<ClCompile Include="Speckle\Utility\Guid.cpp" />
|
||||
|
||||
@@ -106,19 +106,7 @@
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\BrowserBridge.h">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\JSBridgeArgument.h">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\JSBridgeArgumentWrap.h">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\JSBridgeMethod.h">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\JSBridgeMethodBase.h">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\Functions\FunctionBinding.h">
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\Functions\PlatformBinding.h">
|
||||
<Filter>Speckle\Interface\Browser\Bridge\Functions</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\Functions\GetBindingsMethodNames.h">
|
||||
@@ -145,7 +133,19 @@
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\Functions\ErrorReport.h">
|
||||
<Filter>Speckle\Interface\Browser\Bridge\Functions</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\JSArgumentBase.h">
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\BridgeArgument.h">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\BridgeArgumentWrap.h">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\BridgeChild.h">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\BridgeMethod.h">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Speckle\Interface\Browser\Bridge\BridgeMethodBase.h">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
@@ -171,12 +171,6 @@
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\BrowserBridge.cpp">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\JSBridgeArgument.cpp">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\JSBridgeArgumentWrap.cpp">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\Functions\GetBindingsMethodNames.cpp">
|
||||
<Filter>Speckle\Interface\Browser\Bridge\Functions</Filter>
|
||||
</ClCompile>
|
||||
@@ -198,6 +192,12 @@
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\Functions\ErrorReport.cpp">
|
||||
<Filter>Speckle\Interface\Browser\Bridge\Functions</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\BridgeArgument.cpp">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="Speckle\Interface\Browser\Bridge\BridgeArgumentWrap.cpp">
|
||||
<Filter>Speckle\Interface\Browser\Bridge</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Text Include="Speckle\CMakeLists.txt">
|
||||
|
||||
Reference in New Issue
Block a user