// 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;
}
}
}