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

import * as z from "zod/v4-mini";
import { smartUnion } from "../../types/smartUnion.js";
import {
  SubscriptionCancel,
  SubscriptionCancel$Outbound,
  SubscriptionCancel$outboundSchema,
} from "./subscriptioncancel.js";
import {
  SubscriptionPause,
  SubscriptionPause$Outbound,
  SubscriptionPause$outboundSchema,
} from "./subscriptionpause.js";
import {
  SubscriptionResume,
  SubscriptionResume$Outbound,
  SubscriptionResume$outboundSchema,
} from "./subscriptionresume.js";
import {
  SubscriptionRevoke,
  SubscriptionRevoke$Outbound,
  SubscriptionRevoke$outboundSchema,
} from "./subscriptionrevoke.js";
import {
  SubscriptionUpdateBase,
  SubscriptionUpdateBase$Outbound,
  SubscriptionUpdateBase$outboundSchema,
} from "./subscriptionupdatebase.js";
import {
  SubscriptionUpdateBillingPeriod,
  SubscriptionUpdateBillingPeriod$Outbound,
  SubscriptionUpdateBillingPeriod$outboundSchema,
} from "./subscriptionupdatebillingperiod.js";
import {
  SubscriptionUpdateClear,
  SubscriptionUpdateClear$Outbound,
  SubscriptionUpdateClear$outboundSchema,
} from "./subscriptionupdateclear.js";
import {
  SubscriptionUpdateSeats,
  SubscriptionUpdateSeats$Outbound,
  SubscriptionUpdateSeats$outboundSchema,
} from "./subscriptionupdateseats.js";

export type SubscriptionUpdate =
  | SubscriptionUpdateSeats
  | SubscriptionUpdateBillingPeriod
  | SubscriptionCancel
  | SubscriptionRevoke
  | SubscriptionPause
  | SubscriptionResume
  | SubscriptionUpdateClear
  | SubscriptionUpdateBase;

/** @internal */
export type SubscriptionUpdate$Outbound =
  | SubscriptionUpdateSeats$Outbound
  | SubscriptionUpdateBillingPeriod$Outbound
  | SubscriptionCancel$Outbound
  | SubscriptionRevoke$Outbound
  | SubscriptionPause$Outbound
  | SubscriptionResume$Outbound
  | SubscriptionUpdateClear$Outbound
  | SubscriptionUpdateBase$Outbound;

/** @internal */
export const SubscriptionUpdate$outboundSchema: z.ZodMiniType<
  SubscriptionUpdate$Outbound,
  SubscriptionUpdate
> = smartUnion([
  SubscriptionUpdateSeats$outboundSchema,
  SubscriptionUpdateBillingPeriod$outboundSchema,
  SubscriptionCancel$outboundSchema,
  SubscriptionRevoke$outboundSchema,
  SubscriptionPause$outboundSchema,
  SubscriptionResume$outboundSchema,
  SubscriptionUpdateClear$outboundSchema,
  SubscriptionUpdateBase$outboundSchema,
]);

export function subscriptionUpdateToJSON(
  subscriptionUpdate: SubscriptionUpdate,
): string {
  return JSON.stringify(
    SubscriptionUpdate$outboundSchema.parse(subscriptionUpdate),
  );
}
