/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 */

import * as z from "zod/v4-mini";
import { remap as remap$ } from "../../lib/primitives.js";
import {
  BenefitCustomUpdate,
  BenefitCustomUpdate$Outbound,
  BenefitCustomUpdate$outboundSchema,
} from "../components/benefitcustomupdate.js";
import {
  BenefitDiscordUpdate,
  BenefitDiscordUpdate$Outbound,
  BenefitDiscordUpdate$outboundSchema,
} from "../components/benefitdiscordupdate.js";
import {
  BenefitDownloadablesUpdate,
  BenefitDownloadablesUpdate$Outbound,
  BenefitDownloadablesUpdate$outboundSchema,
} from "../components/benefitdownloadablesupdate.js";
import {
  BenefitFeatureFlagUpdate,
  BenefitFeatureFlagUpdate$Outbound,
  BenefitFeatureFlagUpdate$outboundSchema,
} from "../components/benefitfeatureflagupdate.js";
import {
  BenefitGitHubRepositoryUpdate,
  BenefitGitHubRepositoryUpdate$Outbound,
  BenefitGitHubRepositoryUpdate$outboundSchema,
} from "../components/benefitgithubrepositoryupdate.js";
import {
  BenefitLicenseKeysUpdate,
  BenefitLicenseKeysUpdate$Outbound,
  BenefitLicenseKeysUpdate$outboundSchema,
} from "../components/benefitlicensekeysupdate.js";
import {
  BenefitMeterCreditUpdate,
  BenefitMeterCreditUpdate$Outbound,
  BenefitMeterCreditUpdate$outboundSchema,
} from "../components/benefitmetercreditupdate.js";
import {
  BenefitSlackSharedChannelUpdate,
  BenefitSlackSharedChannelUpdate$Outbound,
  BenefitSlackSharedChannelUpdate$outboundSchema,
} from "../components/benefitslacksharedchannelupdate.js";

export type BenefitsUpdateBenefitUpdate =
  | BenefitCustomUpdate
  | BenefitDiscordUpdate
  | BenefitGitHubRepositoryUpdate
  | BenefitDownloadablesUpdate
  | BenefitLicenseKeysUpdate
  | BenefitMeterCreditUpdate
  | BenefitFeatureFlagUpdate
  | BenefitSlackSharedChannelUpdate;

export type BenefitsUpdateRequest = {
  id: string;
  requestBody:
    | BenefitCustomUpdate
    | BenefitDiscordUpdate
    | BenefitGitHubRepositoryUpdate
    | BenefitDownloadablesUpdate
    | BenefitLicenseKeysUpdate
    | BenefitMeterCreditUpdate
    | BenefitFeatureFlagUpdate
    | BenefitSlackSharedChannelUpdate;
};

/** @internal */
export type BenefitsUpdateBenefitUpdate$Outbound =
  | BenefitCustomUpdate$Outbound
  | BenefitDiscordUpdate$Outbound
  | BenefitGitHubRepositoryUpdate$Outbound
  | BenefitDownloadablesUpdate$Outbound
  | BenefitLicenseKeysUpdate$Outbound
  | BenefitMeterCreditUpdate$Outbound
  | BenefitFeatureFlagUpdate$Outbound
  | BenefitSlackSharedChannelUpdate$Outbound;

/** @internal */
export const BenefitsUpdateBenefitUpdate$outboundSchema: z.ZodMiniType<
  BenefitsUpdateBenefitUpdate$Outbound,
  BenefitsUpdateBenefitUpdate
> = z.union([
  BenefitCustomUpdate$outboundSchema,
  BenefitDiscordUpdate$outboundSchema,
  BenefitGitHubRepositoryUpdate$outboundSchema,
  BenefitDownloadablesUpdate$outboundSchema,
  BenefitLicenseKeysUpdate$outboundSchema,
  BenefitMeterCreditUpdate$outboundSchema,
  BenefitFeatureFlagUpdate$outboundSchema,
  BenefitSlackSharedChannelUpdate$outboundSchema,
]);

export function benefitsUpdateBenefitUpdateToJSON(
  benefitsUpdateBenefitUpdate: BenefitsUpdateBenefitUpdate,
): string {
  return JSON.stringify(
    BenefitsUpdateBenefitUpdate$outboundSchema.parse(
      benefitsUpdateBenefitUpdate,
    ),
  );
}

/** @internal */
export type BenefitsUpdateRequest$Outbound = {
  id: string;
  RequestBody:
    | BenefitCustomUpdate$Outbound
    | BenefitDiscordUpdate$Outbound
    | BenefitGitHubRepositoryUpdate$Outbound
    | BenefitDownloadablesUpdate$Outbound
    | BenefitLicenseKeysUpdate$Outbound
    | BenefitMeterCreditUpdate$Outbound
    | BenefitFeatureFlagUpdate$Outbound
    | BenefitSlackSharedChannelUpdate$Outbound;
};

/** @internal */
export const BenefitsUpdateRequest$outboundSchema: z.ZodMiniType<
  BenefitsUpdateRequest$Outbound,
  BenefitsUpdateRequest
> = z.pipe(
  z.object({
    id: z.string(),
    requestBody: z.union([
      BenefitCustomUpdate$outboundSchema,
      BenefitDiscordUpdate$outboundSchema,
      BenefitGitHubRepositoryUpdate$outboundSchema,
      BenefitDownloadablesUpdate$outboundSchema,
      BenefitLicenseKeysUpdate$outboundSchema,
      BenefitMeterCreditUpdate$outboundSchema,
      BenefitFeatureFlagUpdate$outboundSchema,
      BenefitSlackSharedChannelUpdate$outboundSchema,
    ]),
  }),
  z.transform((v) => {
    return remap$(v, {
      requestBody: "RequestBody",
    });
  }),
);

export function benefitsUpdateRequestToJSON(
  benefitsUpdateRequest: BenefitsUpdateRequest,
): string {
  return JSON.stringify(
    BenefitsUpdateRequest$outboundSchema.parse(benefitsUpdateRequest),
  );
}
