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()));
            }
        }
示例#2
0
        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();
                }
            }
        }