diff --git a/EDTS/EDTS.csproj b/EDTS/EDTS.csproj
index b7bd77e..a34c443 100644
--- a/EDTS/EDTS.csproj
+++ b/EDTS/EDTS.csproj
@@ -6,6 +6,7 @@
+
diff --git a/EDTS/EdtsApi.cs b/EDTS/EdtsApi.cs
index 19e6c91..430e8a2 100644
--- a/EDTS/EdtsApi.cs
+++ b/EDTS/EdtsApi.cs
@@ -19,9 +19,10 @@
using System;
using System.Net.Http;
-using System.Net.Http.Headers;
using System.Threading.Tasks;
+using RestSharp;
+
namespace alterNERDtive.Edna.Edts
{
///
@@ -98,18 +99,8 @@ namespace alterNERDtive.Edna.Edts
///
public class EdtsApi
{
- private static readonly string ApiUrl = "http://edts.thargoid.space/api/v1/";
- private static readonly HttpClient ApiClient;
-
- static EdtsApi()
- {
- ApiClient = new HttpClient
- {
- BaseAddress = new Uri(ApiUrl),
- };
- ApiClient.DefaultRequestHeaders.Accept.Clear();
- ApiClient.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
- }
+ private static readonly string ApiUrl = "http://edts.thargoid.space/api/v1";
+ private static readonly RestClient ApiClient = new RestClient(ApiUrl);
///
/// Pulls system data for a given procedurally generated system name.
@@ -118,25 +109,56 @@ namespace alterNERDtive.Edna.Edts
/// The system with calculated coordinates.
public static async Task FindSystem(string name)
{
- HttpResponseMessage response = await ApiClient.GetAsync($"system_position/{name}");
-
- // EDTS API gives a 400 status code (and an empty result) if the
- // system name is not valid.
- if (response.StatusCode == System.Net.HttpStatusCode.BadRequest)
+ try
{
- throw new ArgumentException($"“{name}” is not a valid proc gen system name.", paramName: "name");
+ ApiResult response = await ApiClient.GetAsync(new RestRequest($"system_position/{name}"));
+
+ ApiResult.ApiSystem result = response.Result!.Value;
+
+ return new StarSystem(
+ name: name,
+ coordinates: new Location(
+ x: (int)result.Position.X,
+ y: (int)result.Position.Y,
+ z: (int)result.Position.Z,
+ precision: (int)result.Uncertainty));
}
+ catch (HttpRequestException e)
+ {
+ // EDTS API gives a 400 status code (and an empty result) if the
+ // system name is not valid.
+ if (e.Message.Equals("Request failed with status code BadRequest"))
+ {
+ throw new ArgumentException(message: $"“{name}” is not a valid proc gen system name.", paramName: nameof(name));
+ }
+ else
+ {
+ throw;
+ }
+ }
+ }
- response.EnsureSuccessStatusCode();
- dynamic json = response.Content.ReadAsAsync().Result["result"];
+ private struct ApiResult
+ {
+ public ApiSystem? Result { get; set; }
- return new StarSystem(
- name: name,
- coordinates: new Location(
- x: (int)json["position"]["x"],
- y: (int)json["position"]["y"],
- z: (int)json["position"]["z"],
- precision: (int)json["uncertainty"]));
+ public struct ApiSystem
+ {
+ public string Name { get; set; }
+
+ public ApiLocation Position { get; set; }
+
+ public decimal Uncertainty { get; set; }
+
+ public struct ApiLocation
+ {
+ public decimal X { get; set; }
+
+ public decimal Y { get; set; }
+
+ public decimal Z { get; set; }
+ }
+ }
}
}
}
\ No newline at end of file