// Copyright (c) Microsoft Corporation. // Licensed under the MIT License. using System; using System.Threading.Tasks; namespace Microsoft.MixedReality.Toolkit.Utilities { /// /// Response to a REST Call. /// public struct Response { /// /// Was the REST call successful? /// public bool Successful { get; } /// /// Response body from the resource. /// public string ResponseBody => responseBody ?? (responseBody = responseBodyAction?.Invoke()); /// /// Response body from the resource. /// public async Task GetResponseBody() { if (responseBody != null) { return responseBody; } return await responseBodyTask; } private string responseBody; private Func responseBodyAction; private Task responseBodyTask; /// /// Response data from the resource. /// public byte[] ResponseData => responseData ?? (responseData = responseDataAction?.Invoke()); private byte[] responseData; private Func responseDataAction; /// /// Response code from the resource. /// public long ResponseCode { get; } /// /// Constructor. /// public Response(bool successful, string responseBody, byte[] responseData, long responseCode) { Successful = successful; responseBodyAction = null; responseBodyTask = null; this.responseBody = responseBody; responseDataAction = null; this.responseData = responseData; ResponseCode = responseCode; } public Response(bool successful, Func responseBodyAction, Func responseDataAction, long responseCode) { Successful = successful; this.responseBodyAction = responseBodyAction; responseBodyTask = ResponseUtils.BytesToString(responseDataAction.Invoke()); responseBody = null; this.responseDataAction = responseDataAction; responseData = null; ResponseCode = responseCode; } public Response(bool successful, Task responseBodyTask, Func responseDataAction, long responseCode) { Successful = successful; responseBodyAction = () => System.Text.Encoding.Default.GetString(responseDataAction.Invoke()); this.responseBodyTask = responseBodyTask; responseBody = null; this.responseDataAction = responseDataAction; responseData = null; ResponseCode = responseCode; } public Response(bool successful, Func responseDataAction, long responseCode) { Successful = successful; responseBodyAction = () => System.Text.Encoding.Default.GetString(responseDataAction.Invoke()); responseBodyTask = ResponseUtils.BytesToString(responseDataAction.Invoke()); responseBody = null; this.responseDataAction = responseDataAction; responseData = null; ResponseCode = responseCode; } } }