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)); }
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)); }