mirror of
https://github.com/LukeHagar/plexcsharp.git
synced 2025-12-06 20:47:49 +00:00
ci: regenerated with OpenAPI Doc 0.0.3, Speakeasy CLI 1.129.1
This commit is contained in:
241
PlexAPI/Utils/Utilities.cs
Normal file
241
PlexAPI/Utils/Utilities.cs
Normal file
@@ -0,0 +1,241 @@
|
||||
|
||||
//------------------------------------------------------------------------------
|
||||
// <auto-generated>
|
||||
// This code was generated by Speakeasy (https://speakeasyapi.dev). DO NOT EDIT.
|
||||
//
|
||||
// Changes to this file may cause incorrect behavior and will be lost when
|
||||
// the code is regenerated.
|
||||
// </auto-generated>
|
||||
//------------------------------------------------------------------------------
|
||||
#nullable enable
|
||||
namespace PlexAPI.Utils
|
||||
{
|
||||
using System;
|
||||
using System.Linq;
|
||||
using System.Net.Http.Headers;
|
||||
using System.Collections.Generic;
|
||||
using System.Text.RegularExpressions;
|
||||
using Newtonsoft.Json;
|
||||
using NodaTime;
|
||||
using System.Collections;
|
||||
|
||||
public class Utilities
|
||||
{
|
||||
public static string SerializeJSON(object obj)
|
||||
{
|
||||
return JsonConvert.SerializeObject(
|
||||
obj,
|
||||
new JsonSerializerSettings()
|
||||
{
|
||||
NullValueHandling = NullValueHandling.Ignore,
|
||||
Converters = new JsonConverter[]
|
||||
{
|
||||
new IsoDateTimeSerializer(),
|
||||
new EnumSerializer()
|
||||
}
|
||||
}
|
||||
);
|
||||
}
|
||||
|
||||
public static bool IsDictionary(object? o)
|
||||
{
|
||||
if (o == null)
|
||||
return false;
|
||||
return o is IDictionary
|
||||
&& o.GetType().IsGenericType
|
||||
&& o.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(Dictionary<,>));
|
||||
}
|
||||
|
||||
public static bool IsList(object? o)
|
||||
{
|
||||
if (o == null)
|
||||
return false;
|
||||
return o is IList
|
||||
&& o.GetType().IsGenericType
|
||||
&& o.GetType().GetGenericTypeDefinition().IsAssignableFrom(typeof(List<>));
|
||||
}
|
||||
|
||||
public static bool IsClass(object? o)
|
||||
{
|
||||
if (o == null)
|
||||
return false;
|
||||
return o.GetType().IsClass && (o.GetType().FullName ?? "").StartsWith("PlexAPI.Models");
|
||||
}
|
||||
|
||||
// TODO: code review polyfilled for IsAssignableTo
|
||||
public static bool IsSameOrSubclass(Type potentialBase, Type potentialDescendant)
|
||||
{
|
||||
return potentialDescendant.IsSubclassOf(potentialBase)
|
||||
|| potentialDescendant == potentialBase;
|
||||
}
|
||||
|
||||
public static bool IsString(object? obj)
|
||||
{
|
||||
if (obj != null)
|
||||
{
|
||||
var type = obj.GetType();
|
||||
return IsSameOrSubclass(type, typeof(string));
|
||||
}
|
||||
else
|
||||
{
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
public static bool IsPrimitive(object obj) => obj != null && obj.GetType().IsPrimitive;
|
||||
|
||||
public static bool IsEnum(object obj) => obj != null && obj.GetType().IsEnum;
|
||||
|
||||
public static bool IsDate(object obj) =>
|
||||
obj != null && (obj.GetType() == typeof(DateTime) || obj.GetType() == typeof(LocalDate));
|
||||
|
||||
private static string StripSurroundingQuotes(string input)
|
||||
{
|
||||
Regex surroundingQuotesRegex = new Regex("^\"(.*)\"$");
|
||||
var match = surroundingQuotesRegex.Match(input);
|
||||
if(match.Groups.Values.Count() == 2)
|
||||
{
|
||||
return match.Groups.Values.Last().ToString();
|
||||
}
|
||||
return input;
|
||||
}
|
||||
|
||||
public static string ValueToString(object? value)
|
||||
{
|
||||
if (value == null)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
if (value.GetType() == typeof(DateTime))
|
||||
{
|
||||
return ((DateTime)value)
|
||||
.ToUniversalTime()
|
||||
.ToString("o", System.Globalization.CultureInfo.InvariantCulture);
|
||||
}
|
||||
else if (value.GetType() == typeof(LocalDate))
|
||||
{
|
||||
return ((LocalDate)value)
|
||||
.ToDateTimeUnspecified()
|
||||
.ToString("yyyy-MM-dd", System.Globalization.CultureInfo.InvariantCulture);
|
||||
}
|
||||
else if (value.GetType() == typeof(bool))
|
||||
{
|
||||
return (bool)value ? "true" : "false";
|
||||
}
|
||||
else if (IsEnum(value))
|
||||
{
|
||||
var method = Type.GetType(value.GetType().FullName + "Extension")
|
||||
?.GetMethod("Value");
|
||||
if (method == null)
|
||||
{
|
||||
return Convert.ChangeType(value, Enum.GetUnderlyingType(value.GetType()))?.ToString() ?? "";
|
||||
}
|
||||
return (string)(method.Invoke(null, new[] { value }) ?? "");
|
||||
}
|
||||
|
||||
return value.ToString() ?? "";
|
||||
}
|
||||
|
||||
public static string ToString(object? obj)
|
||||
{
|
||||
if (obj == null)
|
||||
{
|
||||
return "";
|
||||
}
|
||||
|
||||
if (IsString(obj))
|
||||
{
|
||||
return obj.ToString() ?? "";
|
||||
}
|
||||
|
||||
if (IsPrimitive(obj))
|
||||
{
|
||||
return JsonConvert.SerializeObject(obj);
|
||||
}
|
||||
|
||||
if (IsEnum(obj))
|
||||
{
|
||||
var attributes = obj.GetType().GetMember(obj.ToString() ?? "").First().CustomAttributes;
|
||||
if (attributes.Count() == 0)
|
||||
{
|
||||
return JsonConvert.SerializeObject(obj);
|
||||
}
|
||||
|
||||
var args = attributes.First().ConstructorArguments;
|
||||
if (args.Count() == 0)
|
||||
{
|
||||
return JsonConvert.SerializeObject(obj);
|
||||
}
|
||||
return StripSurroundingQuotes(args.First().ToString());
|
||||
}
|
||||
|
||||
if (IsDate(obj))
|
||||
{
|
||||
return StripSurroundingQuotes(JsonConvert.SerializeObject(obj, new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new IsoDateTimeSerializer(), new EnumSerializer() }}));
|
||||
}
|
||||
return JsonConvert.SerializeObject(obj, new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new IsoDateTimeSerializer(), new EnumSerializer() }});
|
||||
}
|
||||
|
||||
public static bool IsContentTypeMatch(string expected, string? actual)
|
||||
{
|
||||
if (actual == null)
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
if (expected == actual || expected == "*" || expected == "*/*")
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
try
|
||||
{
|
||||
var mediaType = MediaTypeHeaderValue.Parse(actual).MediaType ?? "";
|
||||
|
||||
if (expected == mediaType)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
var parts = mediaType.Split('/');
|
||||
if (parts.Length == 2)
|
||||
{
|
||||
if (parts[0] + "/*" == expected || "*/" + parts[1] == expected)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
catch (Exception) { }
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
public static string PrefixBearer(string authHeaderValue)
|
||||
{
|
||||
if (authHeaderValue.StartsWith("bearer ", StringComparison.InvariantCultureIgnoreCase))
|
||||
{
|
||||
return authHeaderValue;
|
||||
}
|
||||
|
||||
return $"Bearer {authHeaderValue}";
|
||||
}
|
||||
public static string RemoveSuffix(string inputString, string suffix)
|
||||
{
|
||||
if (!String.IsNullOrEmpty(suffix) && inputString.EndsWith(suffix))
|
||||
{
|
||||
return inputString.Remove(inputString.Length - suffix.Length, suffix.Length);
|
||||
}
|
||||
return inputString;
|
||||
}
|
||||
public static string TemplateUrl(string template, Dictionary<string, string> paramDict)
|
||||
{
|
||||
foreach(KeyValuePair<string, string> entry in paramDict)
|
||||
{
|
||||
template = template.Replace('{' + entry.Key + '}', entry.Value);
|
||||
}
|
||||
return template;
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user