Exemple #1
0
        public async Task <Result <BindingInfo> > Create(string sourceBinding, string destinationBinding, BindingType bindingType, string vhost,
                                                         string bindingKey = null, Action <BindingConfigurator> configurator = null, CancellationToken cancellationToken = default)
        {
            cancellationToken.RequestCanceled();

            var impl = new BindingConfiguratorImpl();

            configurator?.Invoke(impl);

            impl.Validate();

            BindingRequest request = new()
            {
                BindingKey = bindingKey,
                Arguments  = impl.Arguments.Value
            };

            Debug.Assert(request != null);

            var errors = new List <Error>();

            errors.AddRange(impl.Errors.Value);

            if (string.IsNullOrWhiteSpace(sourceBinding))
            {
                errors.Add(new(){ Reason = "The name of the source binding (queue/exchange) is missing." });
            }

            if (string.IsNullOrWhiteSpace(destinationBinding))
            {
                errors.Add(new(){ Reason = "The name of the destination binding (queue/exchange) is missing." });
            }

            if (string.IsNullOrWhiteSpace(vhost))
            {
                errors.Add(new(){ Reason = "The name of the virtual host is missing." });
            }

            string virtualHost = vhost.ToSanitizedName();

            string url = bindingType == BindingType.Exchange
                ? $"api/bindings/{virtualHost}/e/{sourceBinding}/e/{destinationBinding}"
                : $"api/bindings/{virtualHost}/e/{sourceBinding}/q/{destinationBinding}";

            if (errors.Any())
            {
                return new FaultedResult <BindingInfo> {
                           DebugInfo = new (){ URL = url, Request = request.ToJsonString(Deserializer.Options), Errors = errors }
                }
            }
            ;

            return(await PostRequest <BindingInfo, BindingRequest>(url, request, cancellationToken).ConfigureAwait(false));
        }
Exemple #2
0
        public async Task <Result <BindingInfo> > Create(string sourceBinding, string destinationBinding, BindingType bindingType, string vhost,
                                                         string bindingKey = null, Action <BindingConfigurator> configurator = null, CancellationToken cancellationToken = default)
        {
            cancellationToken.RequestCanceled();

            var impl = new BindingConfiguratorImpl();

            configurator?.Invoke(impl);

            impl.Validate();

            BindingRequest request = new BindingRequest(bindingKey, impl.Arguments.Value);

            Debug.Assert(request != null);

            var errors = new List <Error>();

            errors.AddRange(impl.Errors.Value);

            if (string.IsNullOrWhiteSpace(sourceBinding))
            {
                errors.Add(new ErrorImpl("The name of the source binding (queue/exchange) is missing."));
            }

            if (string.IsNullOrWhiteSpace(destinationBinding))
            {
                errors.Add(new ErrorImpl("The name of the destination binding (queue/exchange) is missing."));
            }

            if (string.IsNullOrWhiteSpace(vhost))
            {
                errors.Add(new ErrorImpl("The name of the virtual host is missing."));
            }

            string virtualHost = vhost.ToSanitizedName();

            string url = bindingType == BindingType.Exchange
                ? $"api/bindings/{virtualHost}/e/{sourceBinding}/e/{destinationBinding}"
                : $"api/bindings/{virtualHost}/e/{sourceBinding}/q/{destinationBinding}";

            if (errors.Any())
            {
                return(new FaultedResult <BindingInfo>(new DebugInfoImpl(url, request.ToJsonString(), errors)));
            }

            Result <BindingInfoImpl> result = await PostRequest <BindingInfoImpl, BindingRequest>(url, request, cancellationToken).ConfigureAwait(false);

            Result <BindingInfo> MapResult(Result <BindingInfoImpl> result) => new ResultCopy(result);

            return(MapResult(result));
        }