public static void Map(ClientModel model, IMapperContext context) { foreach (OperationModel modelOperation in model.Operations) { RuntimeTypeInfo resultType = context.GetRuntimeType( modelOperation.ResultType.Name, Descriptors.TypeDescriptors.TypeKind.ResultType); context.Register( modelOperation.Name, new ResultBuilderDescriptor( new RuntimeTypeInfo( CreateResultBuilderName(modelOperation.Name), CreateStateNamespace(context.Namespace)), context.Types.Single(t => t.RuntimeType.Equals(resultType)), modelOperation.LeafTypes.Select( leafType => { string runtimeType = leafType.RuntimeType.Contains('.') ? leafType.RuntimeType : $"{context.Namespace}.{leafType.RuntimeType}"; string serializationType = leafType.SerializationType.Contains('.') ? leafType.SerializationType : $"{context.Namespace}.{leafType.SerializationType}"; return(new ValueParserDescriptor( leafType.Name, TypeInfos.GetOrCreate(runtimeType), TypeInfos.GetOrCreate(serializationType))); }).ToList())); } }
public static void Map(ClientModel model, IMapperContext context) { foreach (OperationModel modelOperation in model.Operations) { var arguments = modelOperation.Arguments.Select( arg => { NameString typeName = arg.Type.TypeName(); INamedTypeDescriptor namedTypeDescriptor = context.Types.Single(type => type.Name.Equals(typeName)); return(new PropertyDescriptor( arg.Name, arg.Variable.Variable.Name.Value, Rewrite(arg.Type, namedTypeDescriptor), null)); }) .ToList(); RuntimeTypeInfo resultType = context.GetRuntimeType( modelOperation.ResultType.Name, Descriptors.TypeDescriptors.TypeKind.ResultType); string bodyString = modelOperation.Document.ToString(); byte[] body = Encoding.UTF8.GetBytes(modelOperation.Document.ToString(false)); string hash = context.HashProvider.ComputeHash(body); switch (modelOperation.OperationType) { case OperationType.Query: context.Register( modelOperation.Name, new QueryOperationDescriptor( modelOperation.Name, context.Namespace, context.Types.Single(t => t.RuntimeType.Equals(resultType)), arguments, body, bodyString, context.HashProvider.Name, hash, context.RequestStrategy)); break; case OperationType.Mutation: context.Register( modelOperation.Name, new MutationOperationDescriptor( modelOperation.Name, context.Namespace, context.Types.Single(t => t.RuntimeType.Equals(resultType)), arguments, body, bodyString, context.HashProvider.Name, hash, context.RequestStrategy)); break; case OperationType.Subscription: context.Register( modelOperation.Name, new SubscriptionOperationDescriptor( modelOperation.Name, context.Namespace, context.Types.Single(t => t.RuntimeType.Equals(resultType)), arguments, body, bodyString, context.HashProvider.Name, hash, context.RequestStrategy)); break; default: throw new ArgumentOutOfRangeException(); } } }