diff --git a/integrations/.gitattributes b/integrations/.gitattributes
new file mode 100755
index 0000000..c094dba
--- /dev/null
+++ b/integrations/.gitattributes
@@ -0,0 +1,2 @@
+# This allows generated code to be indexed correctly
+*.cs linguist-generated=false
\ No newline at end of file
diff --git a/integrations/.gitignore b/integrations/.gitignore
new file mode 100755
index 0000000..b004ece
--- /dev/null
+++ b/integrations/.gitignore
@@ -0,0 +1,3 @@
+obj/
+bin/
+debug/
diff --git a/integrations/README.md b/integrations/README.md
index f437a42..b7c44e3 100644
--- a/integrations/README.md
+++ b/integrations/README.md
@@ -1 +1,16 @@
# integrations
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/integrations/RELEASES.md b/integrations/RELEASES.md
new file mode 100644
index 0000000..61ad869
--- /dev/null
+++ b/integrations/RELEASES.md
@@ -0,0 +1,11 @@
+
+
+## 2023-10-25 16:24:27
+### Changes
+Based on:
+- OpenAPI Doc 1.0.0 https://docs.wingspan.app/openapi/6470f38d65c260000c025474
+- Speakeasy CLI 1.107.0 (2.171.0) https://github.com/speakeasy-api/speakeasy
+### Generated
+- [csharp v0.1.0] integrations
+### Releases
+- [NuGet v0.1.0] https://www.nuget.org/packages/openapi/0.1.0 - integrations
\ No newline at end of file
diff --git a/integrations/SDK.sln b/integrations/SDK.sln
new file mode 100755
index 0000000..ffd5e35
--- /dev/null
+++ b/integrations/SDK.sln
@@ -0,0 +1,17 @@
+
+Microsoft Visual Studio Solution File, Format Version 12.00
+Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "SDK", "SDK\SDK.csproj", "{F0CE92B5-F3CC-45A2-AA83-118C38724EB1}"
+EndProject
+
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug|Any CPU = Debug|Any CPU
+ Release|Any CPU = Release|Any CPU
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {F0CE92B5-F3CC-45A2-AA83-118C38724EB1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
+ {F0CE92B5-F3CC-45A2-AA83-118C38724EB1}.Debug|Any CPU.Build.0 = Debug|Any CPU
+ {F0CE92B5-F3CC-45A2-AA83-118C38724EB1}.Release|Any CPU.ActiveCfg = Release|Any CPU
+ {F0CE92B5-F3CC-45A2-AA83-118C38724EB1}.Release|Any CPU.Build.0 = Release|Any CPU
+ EndGlobalSection
+EndGlobal
\ No newline at end of file
diff --git a/integrations/SDK/Models/Operations/GetBenefitsEnrollmentIdRequest.cs b/integrations/SDK/Models/Operations/GetBenefitsEnrollmentIdRequest.cs
new file mode 100755
index 0000000..72022d6
--- /dev/null
+++ b/integrations/SDK/Models/Operations/GetBenefitsEnrollmentIdRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Operations
+{
+ using SDK.Utils;
+
+ public class GetBenefitsEnrollmentIdRequest
+ {
+
+ ///
+ /// Unique identifier
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=id")]
+ public string Id { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Operations/GetBenefitsEnrollmentIdResponse.cs b/integrations/SDK/Models/Operations/GetBenefitsEnrollmentIdResponse.cs
new file mode 100755
index 0000000..7102f97
--- /dev/null
+++ b/integrations/SDK/Models/Operations/GetBenefitsEnrollmentIdResponse.cs
@@ -0,0 +1,40 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Operations
+{
+ using SDK.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+ public class GetBenefitsEnrollmentIdResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// An Enrollment records
+ ///
+ public Enrollment? Enrollment { get; set; }
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage? RawResponse { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Operations/GetBenefitsPlanEnrollmentIdRequest.cs b/integrations/SDK/Models/Operations/GetBenefitsPlanEnrollmentIdRequest.cs
new file mode 100755
index 0000000..f260ea5
--- /dev/null
+++ b/integrations/SDK/Models/Operations/GetBenefitsPlanEnrollmentIdRequest.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Operations
+{
+ using SDK.Utils;
+
+ public class GetBenefitsPlanEnrollmentIdRequest
+ {
+
+ ///
+ /// Unique identifier
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=id")]
+ public string Id { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Operations/GetBenefitsPlanEnrollmentIdResponse.cs b/integrations/SDK/Models/Operations/GetBenefitsPlanEnrollmentIdResponse.cs
new file mode 100755
index 0000000..731049c
--- /dev/null
+++ b/integrations/SDK/Models/Operations/GetBenefitsPlanEnrollmentIdResponse.cs
@@ -0,0 +1,40 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Operations
+{
+ using SDK.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+ public class GetBenefitsPlanEnrollmentIdResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// An enrollment into a plan
+ ///
+ public PlanEnrollment? PlanEnrollment { get; set; }
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage? RawResponse { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Operations/GetBenefitsPlanEnrollmentResponse.cs b/integrations/SDK/Models/Operations/GetBenefitsPlanEnrollmentResponse.cs
new file mode 100755
index 0000000..49f1c1a
--- /dev/null
+++ b/integrations/SDK/Models/Operations/GetBenefitsPlanEnrollmentResponse.cs
@@ -0,0 +1,41 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Operations
+{
+ using SDK.Models.Shared;
+ using System.Collections.Generic;
+ using System.Net.Http;
+ using System;
+
+ public class GetBenefitsPlanEnrollmentResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// List of plan enrollments for a member
+ ///
+ public List? PlanEnrollments { get; set; }
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage? RawResponse { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Operations/GetBenefitsServiceResponse.cs b/integrations/SDK/Models/Operations/GetBenefitsServiceResponse.cs
new file mode 100755
index 0000000..9254f37
--- /dev/null
+++ b/integrations/SDK/Models/Operations/GetBenefitsServiceResponse.cs
@@ -0,0 +1,40 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Operations
+{
+ using SDK.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+ public class GetBenefitsServiceResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// Indicates status of service enablement
+ ///
+ public ServiceEnablementResponse? ServiceEnablementResponse { get; set; }
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage? RawResponse { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Operations/PatchBenefitsServiceIdRequest.cs b/integrations/SDK/Models/Operations/PatchBenefitsServiceIdRequest.cs
new file mode 100755
index 0000000..0d09605
--- /dev/null
+++ b/integrations/SDK/Models/Operations/PatchBenefitsServiceIdRequest.cs
@@ -0,0 +1,28 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Operations
+{
+ using SDK.Models.Shared;
+ using SDK.Utils;
+
+ public class PatchBenefitsServiceIdRequest
+ {
+
+ ///
+ /// Unique identifier
+ ///
+ [SpeakeasyMetadata("pathParam:style=simple,explode=false,name=id")]
+ public string Id { get; set; } = default!;
+
+ [SpeakeasyMetadata("request:mediaType=application/json")]
+ public ServiceEnablementUpdate? ServiceEnablementUpdate { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Operations/PatchBenefitsServiceIdResponse.cs b/integrations/SDK/Models/Operations/PatchBenefitsServiceIdResponse.cs
new file mode 100755
index 0000000..8acd27b
--- /dev/null
+++ b/integrations/SDK/Models/Operations/PatchBenefitsServiceIdResponse.cs
@@ -0,0 +1,40 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Operations
+{
+ using SDK.Models.Shared;
+ using System.Net.Http;
+ using System;
+
+ public class PatchBenefitsServiceIdResponse
+ {
+
+ ///
+ /// HTTP response content type for this operation
+ ///
+ public string? ContentType { get; set; } = default!;
+
+ ///
+ /// Indicates status of service enablement
+ ///
+ public ServiceEnablementResponse? ServiceEnablementResponse { get; set; }
+
+ ///
+ /// HTTP response status code for this operation
+ ///
+ public int StatusCode { get; set; } = default!;
+
+ ///
+ /// Raw HTTP response; suitable for custom response parsing
+ ///
+ public HttpResponseMessage? RawResponse { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/A71f30be878693b235f8c5f1650be03c9920ca9821526545760476436104c9dc.cs b/integrations/SDK/Models/Shared/A71f30be878693b235f8c5f1650be03c9920ca9821526545760476436104c9dc.cs
new file mode 100755
index 0000000..76465e1
--- /dev/null
+++ b/integrations/SDK/Models/Shared/A71f30be878693b235f8c5f1650be03c9920ca9821526545760476436104c9dc.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+
+ public class A71f30be878693b235f8c5f1650be03c9920ca9821526545760476436104c9dc
+ {
+
+ [JsonProperty("deductionIds")]
+ public object DeductionIds { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329.cs b/integrations/SDK/Models/Shared/E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329.cs
new file mode 100755
index 0000000..5be1f95
--- /dev/null
+++ b/integrations/SDK/Models/Shared/E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329.cs
@@ -0,0 +1,30 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+
+ public class E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329
+ {
+
+ [JsonProperty("effectiveDate")]
+ public string EffectiveDate { get; set; } = default!;
+
+ [JsonProperty("groupNumber")]
+ public string GroupNumber { get; set; } = default!;
+
+ [JsonProperty("memberNumber")]
+ public string MemberNumber { get; set; } = default!;
+
+ [JsonProperty("status")]
+ public E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329Status Status { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329Status.cs b/integrations/SDK/Models/Shared/E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329Status.cs
new file mode 100755
index 0000000..3613ab4
--- /dev/null
+++ b/integrations/SDK/Models/Shared/E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329Status.cs
@@ -0,0 +1,58 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System;
+
+ public enum E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329Status
+ {
+ [JsonProperty("Active")]
+ Active,
+ [JsonProperty("Paused")]
+ Paused,
+ [JsonProperty("Disabled")]
+ Disabled,
+ }
+
+ public static class E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329StatusExtension
+ {
+ public static string Value(this E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329Status value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329Status ToEnum(this string value)
+ {
+ foreach(var field in typeof(E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329Status).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329Status)
+ {
+ return (E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329Status)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329Status");
+ }
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/Enrollment.cs b/integrations/SDK/Models/Shared/Enrollment.cs
new file mode 100755
index 0000000..bbe9889
--- /dev/null
+++ b/integrations/SDK/Models/Shared/Enrollment.cs
@@ -0,0 +1,24 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+
+ public class Enrollment
+ {
+
+ [JsonProperty("memberId")]
+ public string MemberId { get; set; } = default!;
+
+ [JsonProperty("wingspanBenefits")]
+ public E974d9e9e5676123cf56d2fd858ece1c24be8be15b96a100963b7cb1afada329 WingspanBenefits { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/PlanEnrollment.cs b/integrations/SDK/Models/Shared/PlanEnrollment.cs
new file mode 100755
index 0000000..c609884
--- /dev/null
+++ b/integrations/SDK/Models/Shared/PlanEnrollment.cs
@@ -0,0 +1,67 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class PlanEnrollment
+ {
+
+ [JsonProperty("coverageMonths")]
+ public List CoverageMonths { get; set; } = default!;
+
+ [JsonProperty("createdAt")]
+ public string CreatedAt { get; set; } = default!;
+
+ [JsonProperty("currency")]
+ public object Currency { get; set; } = default!;
+
+ [JsonProperty("effectiveDate")]
+ public string EffectiveDate { get; set; } = default!;
+
+ [JsonProperty("endDate")]
+ public string? EndDate { get; set; }
+
+ [JsonProperty("eventActors")]
+ public Dictionary EventActors { get; set; } = default!;
+
+ [JsonProperty("labels")]
+ public Dictionary Labels { get; set; } = default!;
+
+ [JsonProperty("memberId")]
+ public string MemberId { get; set; } = default!;
+
+ [JsonProperty("monthlyPremium")]
+ public double MonthlyPremium { get; set; } = default!;
+
+ [JsonProperty("name")]
+ public string Name { get; set; } = default!;
+
+ [JsonProperty("planEnrollmentId")]
+ public string PlanEnrollmentId { get; set; } = default!;
+
+ [JsonProperty("planType")]
+ public PlanEnrollmentPlanType PlanType { get; set; } = default!;
+
+ [JsonProperty("sku")]
+ public string Sku { get; set; } = default!;
+
+ [JsonProperty("status")]
+ public PlanEnrollmentStatus Status { get; set; } = default!;
+
+ [JsonProperty("updatedAt")]
+ public string UpdatedAt { get; set; } = default!;
+
+ [JsonProperty("userRoles")]
+ public UserRoles UserRoles { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/PlanEnrollmentCoverageMonth.cs b/integrations/SDK/Models/Shared/PlanEnrollmentCoverageMonth.cs
new file mode 100755
index 0000000..85ade82
--- /dev/null
+++ b/integrations/SDK/Models/Shared/PlanEnrollmentCoverageMonth.cs
@@ -0,0 +1,30 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+
+ public class PlanEnrollmentCoverageMonth
+ {
+
+ [JsonProperty("amountCharged")]
+ public double AmountCharged { get; set; } = default!;
+
+ [JsonProperty("fundingStatus")]
+ public PlanEnrollmentCoverageMonthFundingStatus FundingStatus { get; set; } = default!;
+
+ [JsonProperty("internal")]
+ public A71f30be878693b235f8c5f1650be03c9920ca9821526545760476436104c9dc Internal { get; set; } = default!;
+
+ [JsonProperty("month")]
+ public string Month { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/PlanEnrollmentCoverageMonthFundingStatus.cs b/integrations/SDK/Models/Shared/PlanEnrollmentCoverageMonthFundingStatus.cs
new file mode 100755
index 0000000..66e4631
--- /dev/null
+++ b/integrations/SDK/Models/Shared/PlanEnrollmentCoverageMonthFundingStatus.cs
@@ -0,0 +1,56 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System;
+
+ public enum PlanEnrollmentCoverageMonthFundingStatus
+ {
+ [JsonProperty("Pending")]
+ Pending,
+ [JsonProperty("Complete")]
+ Complete,
+ }
+
+ public static class PlanEnrollmentCoverageMonthFundingStatusExtension
+ {
+ public static string Value(this PlanEnrollmentCoverageMonthFundingStatus value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static PlanEnrollmentCoverageMonthFundingStatus ToEnum(this string value)
+ {
+ foreach(var field in typeof(PlanEnrollmentCoverageMonthFundingStatus).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is PlanEnrollmentCoverageMonthFundingStatus)
+ {
+ return (PlanEnrollmentCoverageMonthFundingStatus)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum PlanEnrollmentCoverageMonthFundingStatus");
+ }
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/PlanEnrollmentPlanType.cs b/integrations/SDK/Models/Shared/PlanEnrollmentPlanType.cs
new file mode 100755
index 0000000..7b8f84c
--- /dev/null
+++ b/integrations/SDK/Models/Shared/PlanEnrollmentPlanType.cs
@@ -0,0 +1,54 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System;
+
+ public enum PlanEnrollmentPlanType
+ {
+ [JsonProperty("MeridioHealth")]
+ MeridioHealth,
+ }
+
+ public static class PlanEnrollmentPlanTypeExtension
+ {
+ public static string Value(this PlanEnrollmentPlanType value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static PlanEnrollmentPlanType ToEnum(this string value)
+ {
+ foreach(var field in typeof(PlanEnrollmentPlanType).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is PlanEnrollmentPlanType)
+ {
+ return (PlanEnrollmentPlanType)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum PlanEnrollmentPlanType");
+ }
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/PlanEnrollmentStatus.cs b/integrations/SDK/Models/Shared/PlanEnrollmentStatus.cs
new file mode 100755
index 0000000..d8043ff
--- /dev/null
+++ b/integrations/SDK/Models/Shared/PlanEnrollmentStatus.cs
@@ -0,0 +1,58 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System;
+
+ public enum PlanEnrollmentStatus
+ {
+ [JsonProperty("Pending")]
+ Pending,
+ [JsonProperty("Active")]
+ Active,
+ [JsonProperty("Terminated")]
+ Terminated,
+ }
+
+ public static class PlanEnrollmentStatusExtension
+ {
+ public static string Value(this PlanEnrollmentStatus value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static PlanEnrollmentStatus ToEnum(this string value)
+ {
+ foreach(var field in typeof(PlanEnrollmentStatus).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is PlanEnrollmentStatus)
+ {
+ return (PlanEnrollmentStatus)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum PlanEnrollmentStatus");
+ }
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/ServiceEnablementResponse.cs b/integrations/SDK/Models/Shared/ServiceEnablementResponse.cs
new file mode 100755
index 0000000..bd4f458
--- /dev/null
+++ b/integrations/SDK/Models/Shared/ServiceEnablementResponse.cs
@@ -0,0 +1,28 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class ServiceEnablementResponse
+ {
+
+ [JsonProperty("enabled")]
+ public bool Enabled { get; set; } = default!;
+
+ [JsonProperty("missingProperties")]
+ public List? MissingProperties { get; set; }
+
+ [JsonProperty("serviceState")]
+ public ServiceEnablementResponseServiceState ServiceState { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/ServiceEnablementResponseServiceState.cs b/integrations/SDK/Models/Shared/ServiceEnablementResponseServiceState.cs
new file mode 100755
index 0000000..499b3f5
--- /dev/null
+++ b/integrations/SDK/Models/Shared/ServiceEnablementResponseServiceState.cs
@@ -0,0 +1,58 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System;
+
+ public enum ServiceEnablementResponseServiceState
+ {
+ [JsonProperty("Disabled")]
+ Disabled,
+ [JsonProperty("Enabled")]
+ Enabled,
+ [JsonProperty("Pending")]
+ Pending,
+ }
+
+ public static class ServiceEnablementResponseServiceStateExtension
+ {
+ public static string Value(this ServiceEnablementResponseServiceState value)
+ {
+ return ((JsonPropertyAttribute)value.GetType().GetMember(value.ToString())[0].GetCustomAttributes(typeof(JsonPropertyAttribute), false)[0]).PropertyName ?? value.ToString();
+ }
+
+ public static ServiceEnablementResponseServiceState ToEnum(this string value)
+ {
+ foreach(var field in typeof(ServiceEnablementResponseServiceState).GetFields())
+ {
+ var attributes = field.GetCustomAttributes(typeof(JsonPropertyAttribute), false);
+ if (attributes.Length == 0)
+ {
+ continue;
+ }
+
+ var attribute = attributes[0] as JsonPropertyAttribute;
+ if (attribute != null && attribute.PropertyName == value)
+ {
+ var enumVal = field.GetValue(null);
+
+ if (enumVal is ServiceEnablementResponseServiceState)
+ {
+ return (ServiceEnablementResponseServiceState)enumVal;
+ }
+ }
+ }
+
+ throw new Exception($"Unknown value {value} for enum ServiceEnablementResponseServiceState");
+ }
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/ServiceEnablementUpdate.cs b/integrations/SDK/Models/Shared/ServiceEnablementUpdate.cs
new file mode 100755
index 0000000..24aa857
--- /dev/null
+++ b/integrations/SDK/Models/Shared/ServiceEnablementUpdate.cs
@@ -0,0 +1,21 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+
+ public class ServiceEnablementUpdate
+ {
+
+ [JsonProperty("enabled")]
+ public bool Enabled { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Models/Shared/UserRoles.cs b/integrations/SDK/Models/Shared/UserRoles.cs
new file mode 100755
index 0000000..79f3579
--- /dev/null
+++ b/integrations/SDK/Models/Shared/UserRoles.cs
@@ -0,0 +1,25 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Models.Shared
+{
+ using Newtonsoft.Json;
+ using System.Collections.Generic;
+
+ public class UserRoles
+ {
+
+ [JsonProperty("ownerIds")]
+ public List OwnerIds { get; set; } = default!;
+
+ [JsonProperty("viewerIds")]
+ public List ViewerIds { get; set; } = default!;
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/SDK.csproj b/integrations/SDK/SDK.csproj
new file mode 100755
index 0000000..056b58b
--- /dev/null
+++ b/integrations/SDK/SDK.csproj
@@ -0,0 +1,22 @@
+
+
+ true
+ openapi
+ 0.1.0
+ Speakeasy
+ net5.0
+ enable
+ README.md
+ true
+ 1591
+ https://github.com/wingspanHQ/client-sdk-csharp
+
+
+
+
+
+
+
+
+
+
diff --git a/integrations/SDK/SDKSDK.cs b/integrations/SDK/SDKSDK.cs
new file mode 100755
index 0000000..007fd3b
--- /dev/null
+++ b/integrations/SDK/SDKSDK.cs
@@ -0,0 +1,318 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK
+{
+ using Newtonsoft.Json;
+ using SDK.Models.Operations;
+ using SDK.Models.Shared;
+ using SDK.Utils;
+ using System.Collections.Generic;
+ using System.Net.Http.Headers;
+ using System.Net.Http;
+ using System.Threading.Tasks;
+ using System;
+
+ ///
+ /// Wingspan Benefits API: Benefits
+ ///
+ public interface ISDKSDK
+ {
+
+ ///
+ /// Retrieve Enrollment Details for a Specific Member
+ ///
+ ///
+ /// Fetches the enrollment status and details for a member identified by the provided unique identifier.
+ ///
+ ///
+ Task GetBenefitsEnrollmentIdAsync(string id);
+
+ ///
+ /// List all plan enrollments
+ ///
+ Task GetBenefitsPlanEnrollmentAsync();
+
+ ///
+ /// Get a particular plan enrollment by ID
+ ///
+ Task GetBenefitsPlanEnrollmentIdAsync(string id);
+
+ ///
+ /// Retrieve Current Benefits Service Status
+ ///
+ ///
+ /// Fetches the current status indicating whether the benefits service is enabled or disabled.
+ ///
+ ///
+ Task GetBenefitsServiceAsync();
+
+ ///
+ /// Modify Benefits Service Status
+ ///
+ ///
+ /// Allows users to change the enablement status of a specified benefits service.
+ ///
+ ///
+ Task PatchBenefitsServiceIdAsync(string id, ServiceEnablementUpdate? serviceEnablementUpdate = null);
+ }
+
+ public class SDKConfig
+ {
+ }
+
+ ///
+ /// Wingspan Benefits API: Benefits
+ ///
+ public class SDKSDK: ISDKSDK
+ {
+ public SDKConfig Config { get; private set; }
+ public static List ServerList = new List()
+ {
+ "https://api.wingspan.app/benefits",
+ "https://stagingapi.wingspan.app/benefits",
+ };
+
+ private const string _language = "csharp";
+ private const string _sdkVersion = "0.1.0";
+ private const string _sdkGenVersion = "2.171.0";
+ private const string _openapiDocVersion = "1.0.0";
+ private const string _userAgent = "speakeasy-sdk/csharp 0.1.0 2.171.0 1.0.0 openapi";
+ private string _serverUrl = "";
+ private ISpeakeasyHttpClient _defaultClient;
+ private ISpeakeasyHttpClient _securityClient;
+
+ public SDKSDK(string? serverUrl = null, ISpeakeasyHttpClient? client = null)
+ {
+ _serverUrl = serverUrl ?? SDKSDK.ServerList[0];
+
+ _defaultClient = new SpeakeasyHttpClient(client);
+ _securityClient = _defaultClient;
+
+ Config = new SDKConfig()
+ {
+ };
+
+ }
+
+ public async Task GetBenefitsEnrollmentIdAsync(string id)
+ {
+ var request = new GetBenefitsEnrollmentIdRequest()
+ {
+ Id = id,
+ };
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/benefits/enrollment/{id}", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _defaultClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetBenefitsEnrollmentIdResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.Enrollment = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ public async Task GetBenefitsPlanEnrollmentAsync()
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = baseUrl + "/benefits/plan-enrollment";
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _defaultClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetBenefitsPlanEnrollmentResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.PlanEnrollments = JsonConvert.DeserializeObject>(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ public async Task GetBenefitsPlanEnrollmentIdAsync(string id)
+ {
+ var request = new GetBenefitsPlanEnrollmentIdRequest()
+ {
+ Id = id,
+ };
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/benefits/plan-enrollment/{id}", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _defaultClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetBenefitsPlanEnrollmentIdResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.PlanEnrollment = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ public async Task GetBenefitsServiceAsync()
+ {
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = baseUrl + "/benefits/service";
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Get, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+
+ var client = _defaultClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new GetBenefitsServiceResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ServiceEnablementResponse = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+
+ public async Task PatchBenefitsServiceIdAsync(string id, ServiceEnablementUpdate? serviceEnablementUpdate = null)
+ {
+ var request = new PatchBenefitsServiceIdRequest()
+ {
+ Id = id,
+ ServiceEnablementUpdate = serviceEnablementUpdate,
+ };
+ string baseUrl = _serverUrl;
+ if (baseUrl.EndsWith("/"))
+ {
+ baseUrl = baseUrl.Substring(0, baseUrl.Length - 1);
+ }
+ var urlString = URLBuilder.Build(baseUrl, "/benefits/service/{id}", request);
+
+
+ var httpRequest = new HttpRequestMessage(HttpMethod.Patch, urlString);
+ httpRequest.Headers.Add("user-agent", _userAgent);
+
+ var serializedBody = RequestBodySerializer.Serialize(request, "ServiceEnablementUpdate", "json");
+ if (serializedBody != null)
+ {
+ httpRequest.Content = serializedBody;
+ }
+
+ var client = _defaultClient;
+
+ var httpResponse = await client.SendAsync(httpRequest);
+
+ var contentType = httpResponse.Content.Headers.ContentType?.MediaType;
+
+ var response = new PatchBenefitsServiceIdResponse
+ {
+ StatusCode = (int)httpResponse.StatusCode,
+ ContentType = contentType,
+ RawResponse = httpResponse
+ };
+
+ if((response.StatusCode == 200))
+ {
+ if(Utilities.IsContentTypeMatch("application/json",response.ContentType))
+ {
+ response.ServiceEnablementResponse = JsonConvert.DeserializeObject(await httpResponse.Content.ReadAsStringAsync(), new JsonSerializerSettings(){ NullValueHandling = NullValueHandling.Ignore, Converters = new JsonConverter[] { new FlexibleObjectDeserializer(), new EnumSerializer() }});
+ }
+
+ return response;
+ }
+ return response;
+ }
+ }
+}
\ No newline at end of file
diff --git a/integrations/SDK/Utils/BigIntSerializer.cs b/integrations/SDK/Utils/BigIntSerializer.cs
new file mode 100755
index 0000000..c5c1867
--- /dev/null
+++ b/integrations/SDK/Utils/BigIntSerializer.cs
@@ -0,0 +1,50 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Utils
+{
+ using System;
+ using System.Globalization;
+ using System.Numerics;
+ using Newtonsoft.Json;
+
+ internal class BigIntSerializer : JsonConverter
+ {
+ public override bool CanConvert(Type objectType) => objectType == typeof(BigInteger);
+
+ public override bool CanRead => true;
+
+ public override object? ReadJson(
+ JsonReader reader,
+ Type objectType,
+ object? existingValue,
+ JsonSerializer serializer
+ )
+ {
+ if (reader.Value == null)
+ {
+ return null;
+ }
+
+ return BigInteger.Parse(reader.Value.ToString()!);
+ }
+
+ public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
+ {
+ if (value == null)
+ {
+ writer.WriteValue("null");
+ return;
+ }
+
+ writer.WriteValue(((BigInteger)value).ToString(CultureInfo.InvariantCulture));
+ }
+ }
+}
diff --git a/integrations/SDK/Utils/DecimalSerializer.cs b/integrations/SDK/Utils/DecimalSerializer.cs
new file mode 100755
index 0000000..0f4e779
--- /dev/null
+++ b/integrations/SDK/Utils/DecimalSerializer.cs
@@ -0,0 +1,49 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Utils
+{
+ using System;
+ using System.Globalization;
+ using Newtonsoft.Json;
+
+ internal class DecimalSerializer : JsonConverter
+ {
+ public override bool CanConvert(Type objectType) => objectType == typeof(Decimal);
+
+ public override bool CanRead => true;
+
+ public override object? ReadJson(
+ JsonReader reader,
+ Type objectType,
+ object? existingValue,
+ JsonSerializer serializer
+ )
+ {
+ if (reader.Value == null)
+ {
+ return null;
+ }
+
+ return Decimal.Parse(reader.Value.ToString()!);
+ }
+
+ public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
+ {
+ if (value == null)
+ {
+ writer.WriteValue("null");
+ return;
+ }
+
+ writer.WriteValue(((Decimal)value).ToString(CultureInfo.InvariantCulture));
+ }
+ }
+}
diff --git a/integrations/SDK/Utils/EnumSerializer.cs b/integrations/SDK/Utils/EnumSerializer.cs
new file mode 100755
index 0000000..bc6f068
--- /dev/null
+++ b/integrations/SDK/Utils/EnumSerializer.cs
@@ -0,0 +1,67 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+using System;
+using Newtonsoft.Json;
+
+namespace SDK.Utils
+{
+ internal class EnumSerializer : JsonConverter
+ {
+ public override bool CanConvert(Type objectType) => objectType.IsEnum;
+
+ public override bool CanRead => true;
+
+ public override object? ReadJson(
+ JsonReader reader,
+ Type objectType,
+ object? existingValue,
+ JsonSerializer serializer
+ )
+ {
+ if (reader.Value == null)
+ {
+ throw new ArgumentNullException(nameof(reader.Value));
+ }
+
+ var extensionType = Type.GetType(objectType.FullName + "Extension");
+ if (extensionType == null)
+ {
+ return Enum.ToObject(objectType, reader.Value);
+ }
+
+ var method = extensionType.GetMethod("ToEnum");
+ if (method == null)
+ {
+ throw new Exception($"Unable to find ToEnum method on {extensionType.FullName}");
+ }
+
+ return method.Invoke(null, new[] { (string)reader.Value });
+ }
+
+ public override void WriteJson(JsonWriter writer, object? value, JsonSerializer serializer)
+ {
+ if (value == null)
+ {
+ writer.WriteValue("null");
+ return;
+ }
+
+ var extensionType = Type.GetType(value.GetType().FullName + "Extension");
+ if (extensionType == null)
+ {
+ writer.WriteValue(value);
+ return;
+ }
+
+ writer.WriteValue(Utilities.ToString(value));
+ }
+ }
+}
diff --git a/integrations/SDK/Utils/FlexibleObjectDeserializer.cs b/integrations/SDK/Utils/FlexibleObjectDeserializer.cs
new file mode 100755
index 0000000..ac565c9
--- /dev/null
+++ b/integrations/SDK/Utils/FlexibleObjectDeserializer.cs
@@ -0,0 +1,44 @@
+
+//------------------------------------------------------------------------------
+//
+// 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.
+//
+//------------------------------------------------------------------------------
+#nullable enable
+namespace SDK.Utils
+{
+ using System;
+ using System.Linq;
+ using System.Collections.Generic;
+ using Newtonsoft.Json;
+ using Newtonsoft.Json.Linq;
+
+ internal class FlexibleObjectDeserializer: JsonConverter
+ {
+ public override bool CanConvert(Type objectType) =>
+ objectType == typeof(object);
+
+ public override bool CanWrite => false;
+
+ public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer)
+ {
+ var token = JToken.ReadFrom(reader);
+
+ if (token is JArray)
+ {
+ return new List