using System; using Serilog; using ShareeBike.Model.Connector; using ShareeBike.Repository.Response; namespace ShareeBike.Repository { public static class CopriCallsStatic { #if !USCSHARP9 private static Version UNSUPPORTEDFUTURECOPRIVERSIONLOWER = new Version(4, 1); #else private static Version UNSUPPORTEDFUTURECOPRIVERSIONLOWER = new(4, 1); #endif #if !USCSHARP9 private static Version UNSUPPORTEDFUTURECOPRIVERSIONUPPER = new Version(4, 2); #else private static Version UNSUPPORTEDFUTURECOPRIVERSIONUPPER = new(4, 2); #endif public static Version UnsupportedVersionLower => UNSUPPORTEDFUTURECOPRIVERSIONLOWER; public static Version UnsupportedVersionUpper => UNSUPPORTEDFUTURECOPRIVERSIONUPPER; /// Deserializes response JSON if response is of supported version or provides default response otherwise. /// Type of response object. /// Response JSON. /// Factory providing default delegate. /// Response object. public static T DeserializeResponse(this string response, Func emptyResponseFactory) where T : class { // Get COPRI version from response. var bikeInfoBase = JsonConvertRethrow.DeserializeObject(response)?.shareejson; if (bikeInfoBase.GetCopriVersion() < UNSUPPORTEDFUTURECOPRIVERSIONLOWER || bikeInfoBase.GetCopriVersion() >= UNSUPPORTEDFUTURECOPRIVERSIONUPPER) { return emptyResponseFactory?.Invoke(bikeInfoBase.copri_version) ?? null; } return JsonConvertRethrow.DeserializeObject>(response)?.shareejson; } /// Deserializes response JSON if response is of supported version or throws an exception. /// Type of response object. /// Response JSON. /// Exception to fire. /// Response object. public static T DeserializeResponse( this string response, Func unsupportedVersionExectpion = null) where T : class { // Get COPRI version from response. var bikeInfoBase = JsonConvertRethrow.DeserializeObject(response)?.shareejson; if (bikeInfoBase.GetCopriVersion() < UNSUPPORTEDFUTURECOPRIVERSIONLOWER || bikeInfoBase.GetCopriVersion() >= UNSUPPORTEDFUTURECOPRIVERSIONUPPER) { Log.Error($"Unsupported copri version {bikeInfoBase.copri_version} detected on attempt to log in."); throw unsupportedVersionExectpion?.Invoke(bikeInfoBase.copri_version) ?? new System.Exception($"Unsupported COPRI version {bikeInfoBase.copri_version} detected."); } return JsonConvertRethrow.DeserializeObject>(response)?.shareejson; } } }