// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

#nullable enable

using System.Diagnostics;
using System.Threading.Tasks;

namespace Microsoft.AspNetCore.Mvc.ModelBinding
{
    // Used as a placeholder to break cycles while building a tree of model binders in ModelBinderFactory.
    //
    // When a cycle is detected by a call to Create(...), we create an instance of this class and return it
    // to break the cycle. Later when the 'real' binder is created we set Inner to point to that.
    internal class PlaceholderBinder : IModelBinder
    {
        public IModelBinder? Inner { get; set;  }

        public Task BindModelAsync(ModelBindingContext bindingContext)
        {
            Debug.Assert(Inner is not null, "Inner must be resolved before BindModelAsync can be called.");

            return Inner.BindModelAsync(bindingContext);
        }
    }
}
