/// <summary>
        /// Gets the shipping methods.
        /// </summary>
        /// <param name="storefront">The storefront.</param>
        /// <param name="visitorContext">The visitor context.</param>
        /// <param name="inputModel">The input model.</param>
        /// <returns>
        /// The manager response where the shipping methods are returned in the Result.
        /// </returns>
        public ManagerResponse<GetDeliveryMethodsResult, IReadOnlyCollection<ShippingMethod>> GetShippingMethods([NotNull] CommerceStorefront storefront, [NotNull] VisitorContext visitorContext, [NotNull] GetShippingMethodsInputModel inputModel)
        {
            Assert.ArgumentNotNull(storefront, "storefront");
            Assert.ArgumentNotNull(visitorContext, "visitorContext");
            Assert.ArgumentNotNull(inputModel, "inputModel");

            GetDeliveryMethodsResult result = new GetDeliveryMethodsResult { Success = false };
            var cartResult = this.CartManager.GetCurrentCart(storefront, visitorContext);
            if (!cartResult.ServiceProviderResult.Success || cartResult.Result == null)
            {
                result.SystemMessages.ToList().AddRange(cartResult.ServiceProviderResult.SystemMessages);
                return new ManagerResponse<GetDeliveryMethodsResult, IReadOnlyCollection<ShippingMethod>>(result, null);
            }

            var cart = cartResult.Result;
            var preferenceType = InputModelExtension.GetShippingOptionType(inputModel.ShippingPreferenceType);

            var request = new GetDeliveryMethodsRequest(
                new ShippingOption { ShippingOptionType = preferenceType },
                (inputModel.ShippingAddress != null) ? inputModel.ShippingAddress.ToParty() : null)
                {
                    Cart = cart,
                    Lines = (inputModel.Lines != null) ? inputModel.Lines.ToCommerceCartLines() : null
                };

            result = this.ShippingServiceProvider.GetShippingMethods<GetShippingMethodsRequest, GetDeliveryMethodsResult>(request);
            return new ManagerResponse<GetDeliveryMethodsResult, IReadOnlyCollection<ShippingMethod>>(result, result.ShippingMethods);
        }
 /// <summary>
 /// Initializes a new instance of the <see cref="ShippingMethodsJsonResult"/> class.
 /// </summary>
 /// <param name="result">The result.</param>
 public ShippingMethodsJsonResult(GetDeliveryMethodsResult result)
     : base(result)
 {
 }