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

import * as z from "zod/v4-mini";
import { safeParse } from "../../lib/schemas.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
import {
  CustomFieldCheckbox,
  CustomFieldCheckbox$inboundSchema,
  CustomFieldCheckbox$Outbound,
  CustomFieldCheckbox$outboundSchema,
} from "./customfieldcheckbox.js";
import {
  CustomFieldDate,
  CustomFieldDate$inboundSchema,
  CustomFieldDate$Outbound,
  CustomFieldDate$outboundSchema,
} from "./customfielddate.js";
import {
  CustomFieldNumber,
  CustomFieldNumber$inboundSchema,
  CustomFieldNumber$Outbound,
  CustomFieldNumber$outboundSchema,
} from "./customfieldnumber.js";
import {
  CustomFieldSelect,
  CustomFieldSelect$inboundSchema,
  CustomFieldSelect$Outbound,
  CustomFieldSelect$outboundSchema,
} from "./customfieldselect.js";
import {
  CustomFieldText,
  CustomFieldText$inboundSchema,
  CustomFieldText$Outbound,
  CustomFieldText$outboundSchema,
} from "./customfieldtext.js";

export type CustomField =
  | CustomFieldCheckbox
  | CustomFieldDate
  | CustomFieldNumber
  | CustomFieldSelect
  | CustomFieldText;

/** @internal */
export const CustomField$inboundSchema: z.ZodMiniType<CustomField, unknown> = z
  .union([
    CustomFieldCheckbox$inboundSchema,
    CustomFieldDate$inboundSchema,
    CustomFieldNumber$inboundSchema,
    CustomFieldSelect$inboundSchema,
    CustomFieldText$inboundSchema,
  ]);
/** @internal */
export type CustomField$Outbound =
  | CustomFieldCheckbox$Outbound
  | CustomFieldDate$Outbound
  | CustomFieldNumber$Outbound
  | CustomFieldSelect$Outbound
  | CustomFieldText$Outbound;

/** @internal */
export const CustomField$outboundSchema: z.ZodMiniType<
  CustomField$Outbound,
  CustomField
> = z.union([
  CustomFieldCheckbox$outboundSchema,
  CustomFieldDate$outboundSchema,
  CustomFieldNumber$outboundSchema,
  CustomFieldSelect$outboundSchema,
  CustomFieldText$outboundSchema,
]);

export function customFieldToJSON(customField: CustomField): string {
  return JSON.stringify(CustomField$outboundSchema.parse(customField));
}
export function customFieldFromJSON(
  jsonString: string,
): SafeParseResult<CustomField, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => CustomField$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'CustomField' from JSON`,
  );
}
