private async Task <Result> ExecutePlayFabCloudFunction(string functionName, object functionParameter)
        {
            try
            {
                var execute = await global::PlayFab.PlayFabCloudScriptAPI.ExecuteFunctionAsync(new global::PlayFab.CloudScriptModels.ExecuteFunctionRequest
                {
                    FunctionName            = functionName,
                    FunctionParameter       = JsonUtil.Serialize(functionParameter),
                    GeneratePlayStreamEvent = true,
                });

                if (execute.Error == null)
                {
                    return(Result.Ok());
                }
                else
                {
                    var exception = new PlayFabException(execute.Error);
                    UnityEngine.Debug.LogException(exception);
                    return(Result.Failure(exception));
                }
            }
            catch (Exception ex)
            {
                UnityEngine.Debug.LogError($"Exception occured when calling Function {functionName}");
                UnityEngine.Debug.LogException(ex);
                return(Result.Failure(ex));
            }
        }
        private async Task <ResultT <T> > ExecutePlayFabCloudFunction <T>(string functionName, object functionParameter)
            where T : class
        {
            try
            {
                var execute = await global::PlayFab.PlayFabCloudScriptAPI.ExecuteFunctionAsync(new global::PlayFab.CloudScriptModels.ExecuteFunctionRequest
                {
                    FunctionName            = functionName,
                    FunctionParameter       = JsonUtil.Serialize(functionParameter),
                    GeneratePlayStreamEvent = true,
                });

                if (execute.Error == null)
                {
                    // NOTE [bgish]: Even though our cloud functions return strings, PlayFab converts them to objects, so lets convert them back to a string
                    string resultJson = JsonUtil.Serialize(execute.Result.FunctionResult);

                    return(ResultT <T> .Ok(JsonUtil.Deserialize <T>(resultJson)));
                }
                else
                {
                    var exception = new PlayFabException(execute.Error);
                    UnityEngine.Debug.LogException(exception);
                    return(ResultT <T> .Failure(exception));
                }
            }
            catch (Exception ex)
            {
                UnityEngine.Debug.LogError($"Exception occured when calling Function {functionName}");
                UnityEngine.Debug.LogException(ex);
                return(ResultT <T> .Failure(ex));
            }
        }