using System.Text.Json;
using System.Text.Json.Serialization;
namespace ModelContextProtocol.Protocol;
///
/// Represents the client's response to an elicitation request.
///
public sealed class ElicitResult : Result
{
///
/// Gets or sets the user action in response to the elicitation.
///
///
/// Defaults to "cancel" if not explicitly set.
///
///
///
/// -
/// "accept"
/// User submitted the form/confirmed the action
///
/// -
/// "decline"
/// User explicitly declined the action
///
/// -
/// "cancel"
/// User dismissed without making an explicit choice (default)
///
///
///
[JsonPropertyName("action")]
public string Action { get; set; } = "cancel";
///
/// Gets a value that indicates whether the elicitation was accepted by the user.
///
///
/// If , it indicates that the elicitation request completed successfully and value of has been populated with a value.
///
[JsonIgnore]
public bool IsAccepted => string.Equals(Action, "accept", StringComparison.OrdinalIgnoreCase);
///
/// Gets or sets the submitted form data.
///
///
///
/// This value is typically omitted if the action is "cancel" or "decline".
///
///
/// Values in the dictionary should be of types , ,
/// , , or (for multi-select enums).
///
///
[JsonPropertyName("content")]
public IDictionary? Content { get; set; }
}
///
/// Represents the client's response to an elicitation request, with typed content payload.
///
/// The type of the expected content payload.
public sealed class ElicitResult : Result
{
///
/// Gets or sets the user action in response to the elicitation.
///
///
/// Defaults to "cancel" if not explicitly set.
///
///
///
/// -
/// "accept"
/// User submitted the form/confirmed the action
///
/// -
/// "decline"
/// User explicitly declined the action
///
/// -
/// "cancel"
/// User dismissed without making an explicit choice (default)
///
///
///
public string Action { get; set; } = "cancel";
///
/// Gets a value that indicates whether the elicitation was accepted by the user.
///
///
/// If , it indicates that the elicitation request completed successfully and value of has been populated with a value.
///
public bool IsAccepted => string.Equals(Action, "accept", StringComparison.OrdinalIgnoreCase);
///
/// Gets or sets the submitted form data as a typed value.
///
public T? Content { get; set; }
}