static RpcParameterInfo ExtractParam(ParameterInfo parameterInfo) { Type parameterType = parameterInfo.ParameterType; RpcParameterType type = RpcParameterUtil.GetRpcType(parameterType); return(new RpcParameterInfo(parameterInfo.Name, type, parameterInfo.ParameterType, parameterInfo.IsOptional)); }
static JsonBytesRpcParameter FromRaw(object?value, JsonSerializerOptions?serializerOptions = null) { string json = JsonSerializer.Serialize(value, serializerOptions); RpcParameterType type = value != null?RpcParameterUtil.GetRpcType(value.GetType()) : RpcParameterType.Null; JsonElement element = JsonDocument.Parse(json).RootElement; return(new JsonBytesRpcParameter(type, element, serializerOptions)); }
private bool ParametersMatch(RpcRequestSignature requestSignature, IReadOnlyList <IRpcParameterInfo> parameters) { if (!requestSignature.HasParameters) { return(parameters == null || !parameters.Any(p => !p.IsOptional)); } int parameterCount = 0; if (requestSignature.IsDictionary) { foreach ((Memory <char> name, RpcParameterType type) in requestSignature.ParametersAsDict) { bool found = false; for (int paramIndex = 0; paramIndex < parameters.Count; paramIndex++) { IRpcParameterInfo parameter = parameters[paramIndex]; if (!RpcUtil.NamesMatch(parameter.Name.AsSpan(), name.Span) || !RpcParameterUtil.TypesCompatible(parameter.Type, type)) { continue; } found = true; break; } if (!found) { return(false); } parameterCount++; } } else { foreach (RpcParameterType parameterType in requestSignature.ParametersAsList) { if (parameters.Count <= parameterCount) { return(false); } IRpcParameterInfo info = parameters[parameterCount]; if (!RpcParameterUtil.TypesCompatible(info.Type, parameterType)) { return(false); } parameterCount++; } for (int i = parameterCount; i < parameters.Count; i++) { //Only if the last parameters in the method are optional does the request match //Will be skipped if they are equal length if (!parameters[i].IsOptional) { return(false); } } } if (parameterCount != parameters.Count) { return(false); } return(true); }