Bumped package version to 1.4.7. Added support for Stream requests and MemoryStream responses.

This commit is contained in:
2023-03-31 08:21:32 -07:00
parent fe99ba9b9d
commit cf477522c0
5 changed files with 221 additions and 65 deletions

View File

@@ -17,7 +17,7 @@
<AssemblyName>MontoyaTech.Rest.Net</AssemblyName>
<RootNamespace>MontoyaTech.Rest.Net</RootNamespace>
<GenerateDocumentationFile>True</GenerateDocumentationFile>
<Version>1.4.6</Version>
<Version>1.4.7</Version>
<PackageReleaseNotes></PackageReleaseNotes>
<PackageIcon>Logo_Symbol_Black_Outline.png</PackageIcon>
</PropertyGroup>

View File

@@ -3,8 +3,10 @@ using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Text;
using System.IO;
using System.Threading.Tasks;
using System.Xml.Linq;
using System.IO.Pipes;
namespace MontoyaTech.Rest.Net
{
@@ -413,10 +415,20 @@ namespace MontoyaTech.Rest.Net
//Add the request content if any.
if (routeRequest != null)
{
if (routeRequest.Json)
if (routeRequest.RequestType.IsAssignableTo(typeof(Stream)))
{
writer.WriteBreak().WriteLine("request.Seek(0, System.IO.SeekOrigin.Begin);");
writer.WriteBreak().WriteLine("message.Content = new StreamContent(request);");
}
else if (routeRequest.Json)
{
writer.WriteBreak().WriteLine("message.Content = new StringContent(JsonConvert.SerializeObject(request));");
}
else
{
writer.WriteBreak().WriteLine("message.Content = new StringContent(request.ToString());");
}
}
//Generate the response code
@@ -430,80 +442,93 @@ namespace MontoyaTech.Rest.Net
{
writer.WriteBreak().WriteLine("if (response.IsSuccessStatusCode)").WriteLine("{").Indent();
writer.WriteBreak().WriteLine("var content = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();");
writer.WriteBreak().WriteLine("if (string.IsNullOrEmpty(content))").Indent().WriteLine("return default;").Outdent();
if (routeResponse.Json)
if (routeResponse.ResponseType.IsEquivalentTo(typeof(MemoryStream)))
{
writer.WriteBreak().WriteLine($"return JsonConvert.DeserializeObject<{this.GetTypeFullyResolvedName(routeResponse.ResponseType)}>(content);");
writer.WriteBreak().WriteLine($"var stream = new {this.GetTypeFullyResolvedName(routeResponse.ResponseType)}();");
writer.WriteBreak().WriteLine("response.Content.ReadAsStream().CopyTo(stream);");
writer.WriteBreak().WriteLine("stream.Seek(0, System.IO.SeekOrigin.Begin);");
writer.WriteBreak().WriteLine("return stream;");
}
else
{
switch (Type.GetTypeCode(routeResponse.ResponseType))
writer.WriteBreak().WriteLine("var content = response.Content.ReadAsStringAsync().GetAwaiter().GetResult();");
writer.WriteBreak().WriteLine("if (string.IsNullOrEmpty(content))").Indent().WriteLine("return default;").Outdent();
if (routeResponse.Json)
{
case TypeCode.Boolean:
writer.WriteBreak().WriteLine("return bool.Parse(content);");
break;
writer.WriteBreak().WriteLine($"return JsonConvert.DeserializeObject<{this.GetTypeFullyResolvedName(routeResponse.ResponseType)}>(content);");
}
else
{
switch (Type.GetTypeCode(routeResponse.ResponseType))
{
case TypeCode.Boolean:
writer.WriteBreak().WriteLine("return bool.Parse(content);");
break;
case TypeCode.Byte:
writer.WriteBreak().WriteLine("return byte.Parse(content);");
break;
case TypeCode.Byte:
writer.WriteBreak().WriteLine("return byte.Parse(content);");
break;
case TypeCode.Char:
writer.WriteBreak().WriteLine("return content[0];");
break;
case TypeCode.Char:
writer.WriteBreak().WriteLine("return content[0];");
break;
case TypeCode.DateTime:
writer.WriteBreak().WriteLine("return DateTime.Parse(content);");
break;
case TypeCode.DateTime:
writer.WriteBreak().WriteLine("return DateTime.Parse(content);");
break;
case TypeCode.Decimal:
writer.WriteBreak().WriteLine("return decimal.Parse(content);");
break;
case TypeCode.Decimal:
writer.WriteBreak().WriteLine("return decimal.Parse(content);");
break;
case TypeCode.Double:
writer.WriteBreak().WriteLine("return double.Parse(content);");
break;
case TypeCode.Double:
writer.WriteBreak().WriteLine("return double.Parse(content);");
break;
case TypeCode.Int16:
writer.WriteBreak().WriteLine("return short.Parse(content);");
break;
case TypeCode.Int16:
writer.WriteBreak().WriteLine("return short.Parse(content);");
break;
case TypeCode.Int32:
writer.WriteBreak().WriteLine("return int.Parse(content);");
break;
case TypeCode.Int32:
writer.WriteBreak().WriteLine("return int.Parse(content);");
break;
case TypeCode.Int64:
writer.WriteBreak().WriteLine("return long.Parse(content);");
break;
case TypeCode.Int64:
writer.WriteBreak().WriteLine("return long.Parse(content);");
break;
case TypeCode.SByte:
writer.WriteBreak().WriteLine("return sbyte.Parse(content);");
break;
case TypeCode.SByte:
writer.WriteBreak().WriteLine("return sbyte.Parse(content);");
break;
case TypeCode.Single:
writer.WriteBreak().WriteLine("return float.Parse(content);");
break;
case TypeCode.Single:
writer.WriteBreak().WriteLine("return float.Parse(content);");
break;
case TypeCode.String:
writer.WriteBreak().WriteLine("return content;");
break;
case TypeCode.String:
writer.WriteBreak().WriteLine("return content;");
break;
case TypeCode.UInt16:
writer.WriteBreak().WriteLine("return ushort.Parse(content);");
break;
case TypeCode.UInt16:
writer.WriteBreak().WriteLine("return ushort.Parse(content);");
break;
case TypeCode.UInt32:
writer.WriteBreak().WriteLine("return uint.Parse(content);");
break;
case TypeCode.UInt32:
writer.WriteBreak().WriteLine("return uint.Parse(content);");
break;
case TypeCode.UInt64:
writer.WriteBreak().WriteLine("return ulong.Parse(content);");
break;
case TypeCode.UInt64:
writer.WriteBreak().WriteLine("return ulong.Parse(content);");
break;
case TypeCode.Object:
throw new NotSupportedException("ResponseType isn't JSON but is an object.");
case TypeCode.Object:
throw new NotSupportedException("ResponseType isn't JSON but is an object.");
}
}
}