public ThriftMethodHandler(ThriftMethodMetadata methodMetadata, ThriftCodecManager codecManager) { this.QualifiedName = methodMetadata.QualifiedName; this.Name = methodMetadata.Name; this._invokeAsynchronously = methodMetadata.IsAsync; this._oneway = !_invokeAsynchronously && methodMetadata.IsOneWay; ParameterHandler[] parameters = new ParameterHandler[methodMetadata.Parameters.Count()]; foreach (var fieldMetadata in methodMetadata.Parameters) { ThriftParameterInjection parameter = (ThriftParameterInjection)fieldMetadata.Injections.First(); ParameterHandler handler = new ParameterHandler( fieldMetadata.Id, fieldMetadata.Name, codecManager.GetCodec(fieldMetadata.ThriftType)); parameters[parameter.ParameterIndex] = handler; } this._parameterCodecs = parameters; var builder = ImmutableDictionary.CreateBuilder <short, IThriftCodec>(); foreach (var entry in methodMetadata.Exceptions) { builder.Add(entry.Key, codecManager.GetCodec(entry.Value)); } _exceptionCodecs = builder.ToImmutableDictionary(); // get the thrift codec for the return value _successCodec = codecManager.GetCodec(methodMetadata.ReturnType); }
private static ThriftFieldMetadata CreateFieldMetadata(ThriftCatalog catalog, int index, ParameterInfo parameterInfo) { ThriftFieldAttribute thriftField = parameterInfo.GetCustomAttribute <ThriftFieldAttribute>(); short parameterId = short.MinValue; String parameterName = parameterInfo.Name; Requiredness parameterRequiredness = Requiredness.Unspecified; if (thriftField != null) { parameterId = thriftField.Id; parameterRequiredness = thriftField.Required; if (!String.IsNullOrWhiteSpace(thriftField.Name)) { parameterName = thriftField.Name.Trim(); } } if (parameterId == short.MinValue) { parameterId = (short)(index + 1); } ThriftType thriftType = catalog.GetThriftType(parameterInfo.ParameterType); var parameterInjection = new ThriftParameterInjection(parameterId, parameterName, index, parameterInfo.ParameterType); if (parameterRequiredness == Requiredness.Unspecified) { // There is only one field injection used to build metadata for method parameters, and if a // single injection point has UNSPECIFIED requiredness, that resolves to NONE. parameterRequiredness = Requiredness.None; } ThriftFieldMetadata fieldMetadata = new ThriftFieldMetadata( parameterId, false /* recursiveness */, parameterRequiredness, new DefaultThriftTypeReference(thriftType), parameterName, FieldKind.ThriftField, new IThriftInjection[] { parameterInjection }); return(fieldMetadata); }