private static ParameterIL BuildParameter(IParameter parameter) { return(parameter switch { INamedParameter namedParameter => new NamedParameterIL(namedParameter.Symbol), ISelfParameter selfParameter => new SelfParameterIL(selfParameter.Symbol), IFieldParameter fieldParameter => new FieldParameterIL(fieldParameter.ReferencedSymbol), _ => throw ExhaustiveMatch.Failed(parameter) });
/// <summary> /// Create a response to the user requesting a specific parameter /// </summary> /// <param name="param">the parameter details</param> /// <param name="c">the conversation it occurs in</param> /// <param name="parameters">context parameters</param> /// <param name="message"></param> /// <returns></returns> public virtual ConversationResponse RequestParam(IFieldParameter param, IConversationContext context, string message) { var c = context.GetCurrentConversation(); c.Data[ReqParam] = new ParameterData { DisplayName = param.ParamName }; if (string.IsNullOrWhiteSpace(message)) { message = param.GetParameter("", context).Error; } var intentInput = param.GetInput(context.Parameters, c); return(ConversationResponseFactory.Create(c.Intent.KeyName, message, c.IsEnded, intentInput)); }
/// <summary> /// get a valid parameter object by checking for it in the previously retrieved data store or by finding it based on the information provided by the user /// </summary> /// <param name="paramName">the parameter to retrieve</param> /// <param name="context"></param> /// <returns></returns> public virtual IParameterResult LookupParam(IFieldParameter param, IConversationContext context) { var c = context.GetCurrentConversation(); var storedValue = c.Data.ContainsKey(param.ParamName) ? c.Data[param.ParamName] : null; if (storedValue != null && !storedValue.IsIncomplete) { return(ResultFactory.GetSuccess(storedValue.DisplayName, storedValue.Value)); } string value = SearchUserValues(param.ParamName, context); if (string.IsNullOrEmpty(value)) { return(ResultFactory.GetFailure()); } var paramResult = param.GetParameter(value, context); if (paramResult.HasFailed) { return(paramResult); } if (IsParamRequest(param.ParamName, c)) // clear any request for this property { c.Data.Remove(ReqParam); } c.Data[param.ParamName] = new ParameterData { DisplayName = paramResult.DisplayName, Value = paramResult.DataValue }; return(ResultFactory.GetSuccess(paramResult.DisplayName, paramResult.DataValue)); }