File: Template\InputParameterData.cs
Web Access
Project: src\src\sdk\src\TemplateEngine\Microsoft.TemplateEngine.Edge\Microsoft.TemplateEngine.Edge.csproj (Microsoft.TemplateEngine.Edge)
// Licensed to the .NET Foundation under one or more agreements.
// The .NET Foundation licenses this file to you under the MIT license.

using Microsoft.TemplateEngine.Abstractions;
using Microsoft.TemplateEngine.Abstractions.Parameters;

namespace Microsoft.TemplateEngine.Edge.Template;

/// <summary>
/// Type representing input data into <see cref="TemplateCreator"/>.
/// </summary>
public class InputParameterData
{
    /// <summary>
    /// Creates new instance of the <see cref="InputParameterData"/> type.
    /// </summary>
    /// <param name="parameterDefinition"></param>
    /// <param name="value"></param>
    /// <param name="dataSource"></param>
    /// <param name="inputDataState"></param>
    public InputParameterData(
        ITemplateParameter parameterDefinition,
        object? value,
        DataSource dataSource = DataSource.User,
        InputDataState inputDataState = InputDataState.Set)
    {
        ParameterDefinition = parameterDefinition;
        Value = value;
        DataSource = dataSource;
        InputDataState = inputDataState;
    }

    /// <summary>
    /// Descriptor of the parameter.
    /// </summary>
    public ITemplateParameter ParameterDefinition { get; }

    /// <summary>
    /// Value of the parameter.
    /// </summary>
    public object? Value { get; }

    /// <summary>
    /// Source of the parameter value. If supplied by the host - leave the default value of <see cref="DataSource.User"/>.
    /// </summary>
    public DataSource DataSource { get; }

    /// <summary>
    /// Input data state - indicates how the actual value should be treated (ignored, regarded as explicitly unset value, etc.).
    /// </summary>
    public InputDataState InputDataState { get; }

    public override string ToString() => $"{ParameterDefinition}: {Value?.ToString() ?? "<null>"}";
}