static object[] ConvertArguments(Parameter[] parameters, params object[] arguments) { IServiceProvider serviceProvider = ServiceContainer.ServiceProvider; if (parameters == null && arguments == null) { return(new object[] { }); } if (parameters == null || arguments == null || parameters.Length != arguments.Length) { throw new ArgumentException("Arguments do not match method parameters", nameof(arguments)); } IFrameworkToJsiiConverter converter = serviceProvider.GetRequiredService <IFrameworkToJsiiConverter>(); IReferenceMap referenceMap = serviceProvider.GetRequiredService <IReferenceMap>(); return(parameters.Zip(arguments, (parameter, frameworkArgument) => { if (!converter.TryConvert(parameter, referenceMap, frameworkArgument, out object jsiiArgument)) { throw new ArgumentException($"Could not convert argument '{frameworkArgument}' to Jsii", nameof(arguments)); } return jsiiArgument; }).ToArray()); }
public static object?InvokeCallback(this Callback callback, IReferenceMap referenceMap, IFrameworkToJsiiConverter converter, out string?error) { try { CallbackResult?frameworkResult = callback.InvokeCallbackCore(referenceMap); converter.TryConvert( frameworkResult, referenceMap, frameworkResult?.Value, out object?result ); error = null; return(result); } catch (TargetInvocationException e) { // An exception was thrown by the method being invoked error = e.InnerException?.ToString(); return(null); } catch (Exception e) { // An exception was thrown while preparing the request or processing the result error = e.ToString(); return(null); } }
static object[] ConvertArguments(Parameter[] parameters, params object[] arguments) { IServiceProvider serviceProvider = ServiceContainer.ServiceProvider; if (parameters == null && arguments == null) { return(new object[] { }); } if (parameters == null || arguments == null || parameters.Length != arguments.Length) { throw new ArgumentException("Arguments do not match method parameters", nameof(arguments)); } var cleanedArgs = new List <object>(arguments); var cleanedParams = new List <Parameter>(parameters); // Handling variadic parameters (null array, empty array, one value array, n values array..) if (parameters.Length > 0 && parameters.Last().IsVariadic) { // Last parameter is variadic, let's explode the .NET attributes Array variadicValues = arguments.Last() as Array; // We remove the last argument (the variadic array); cleanedArgs.RemoveAt(cleanedArgs.Count - 1); // A null value could be passed as a params if (variadicValues != null) { // We save the last parameter to backfill the parameters list var lastParameter = cleanedParams.Last(); for (int i = 0; i < variadicValues.Length; i++) { // Backfill the arguments cleanedArgs.Add(variadicValues.GetValue(i)); // Backfill the parameters if necessary, for a 1:1 mirror with the cleanedArgs if (cleanedArgs.Count != cleanedParams.Count) { cleanedParams.Add(lastParameter); } } } } IFrameworkToJsiiConverter converter = serviceProvider.GetRequiredService <IFrameworkToJsiiConverter>(); IReferenceMap referenceMap = serviceProvider.GetRequiredService <IReferenceMap>(); return(cleanedParams.Zip(cleanedArgs, (parameter, frameworkArgument) => { if (!converter.TryConvert(parameter, referenceMap, frameworkArgument, out object jsiiArgument)) { throw new ArgumentException($"Could not convert argument '{frameworkArgument}' to Jsii", nameof(arguments)); } return jsiiArgument; }).ToArray()); }
public ClientTestBase() { _fileSystem = Substitute.For <IFileSystem>(); _runtime = Substitute.For <IRuntime>(); _referenceMap = Substitute.For <IReferenceMap>(); _frameworkToJsiiConverter = Substitute.For <IFrameworkToJsiiConverter>(); _loadedPackages = Substitute.For <ILoadedPackageSet>(); _loggerFactory = Substitute.For <ILoggerFactory>(); _file = Substitute.For <IFile>(); _directory = Substitute.For <IDirectory>(); _fileSystem.File.Returns(_file); _fileSystem.Directory.Returns(_directory); }
static void SetPropertyCore <T>(T value, JsiiPropertyAttribute propertyAttribute, Action <IClient, object> setAction) { IServiceProvider serviceProvider = ServiceContainer.ServiceProvider; IFrameworkToJsiiConverter converter = serviceProvider.GetRequiredService <IFrameworkToJsiiConverter>(); IReferenceMap referenceMap = serviceProvider.GetRequiredService <IReferenceMap>(); if (!converter.TryConvert(propertyAttribute, referenceMap, value, out object jsiiValue)) { throw new ArgumentException($"Could not set property '{propertyAttribute.Name}' to '{value}'", nameof(value)); } IClient client = serviceProvider.GetRequiredService <IClient>(); setAction(client, jsiiValue); }
public Client ( IFileSystem fileSystem, IRuntime runtime, IReferenceMap referenceMap, IFrameworkToJsiiConverter frameworkToJsiiConverter, ILoadedPackageSet loadedPackages, ILoggerFactory loggerFactory ) { _fileSystem = fileSystem ?? throw new ArgumentNullException(nameof(fileSystem)); _runtime = runtime ?? throw new ArgumentNullException(nameof(runtime)); _referenceMap = referenceMap ?? throw new ArgumentNullException(nameof(referenceMap)); _frameworkToJsiiConverter = frameworkToJsiiConverter ?? throw new ArgumentNullException(nameof(frameworkToJsiiConverter)); _loadedPackages = loadedPackages ?? throw new ArgumentNullException(nameof(loadedPackages)); loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory)); _logger = loggerFactory.CreateLogger <Client>(); }
static void InvokeCallbacks() { IServiceProvider serviceProvider = ServiceContainer.ServiceProvider; IClient client = serviceProvider.GetRequiredService <IClient>(); IFrameworkToJsiiConverter converter = serviceProvider.GetRequiredService <IFrameworkToJsiiConverter>(); IReferenceMap referenceMap = serviceProvider.GetRequiredService <IReferenceMap>(); CallbacksResponse callbacks = client.Callbacks(); while (callbacks.Callbacks.Any()) { foreach (Callback callback in callbacks.Callbacks) { object result = callback.InvokeCallback(referenceMap, converter, out string error); client.Complete(callback.CallbackId, error, result); } callbacks = client.Callbacks(); } }
public static object InvokeCallback(this Callback callback, IReferenceMap referenceMap, IFrameworkToJsiiConverter converter, out string error) { try { object frameworkResult = callback.InvokeCallbackCore(referenceMap); converter.TryConvert( new TypeReference(primitive: PrimitiveType.Any), referenceMap, frameworkResult, out object result ); error = null; return(result); } catch (TargetInvocationException e) { throw e.InnerException; } catch (TargetParameterCountException) { throw; } catch (Exception e) { error = e.ToString(); return(null); } }