/*
 * Code generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
 * @generated-id: 300a880b5858
 */

import * as z from "zod/v3";
import { remap as remap$ } from "../../lib/primitives.js";
import { safeParse } from "../../lib/schemas.js";
import { Result as SafeParseResult } from "../../types/fp.js";
import { SDKValidationError } from "../errors/sdkvalidationerror.js";
import {
  AudioURL,
  AudioURL$inboundSchema,
  AudioURL$Outbound,
  AudioURL$outboundSchema,
} from "./audiourl.js";

export type AudioURLChunkAudioURL = AudioURL | string;

/**
 * Audio URL chunk.
 *
 * @remarks
 *
 * Attributes:
 *     type: The type of the chunk, which is always `ChunkTypes.audio_url`.
 *     audio_url: The URL of the audio file.
 */
export type AudioURLChunk = {
  type?: "audio_url" | undefined;
  audioUrl: AudioURL | string;
};

/** @internal */
export const AudioURLChunkAudioURL$inboundSchema: z.ZodType<
  AudioURLChunkAudioURL,
  z.ZodTypeDef,
  unknown
> = z.union([AudioURL$inboundSchema, z.string()]);
/** @internal */
export type AudioURLChunkAudioURL$Outbound = AudioURL$Outbound | string;

/** @internal */
export const AudioURLChunkAudioURL$outboundSchema: z.ZodType<
  AudioURLChunkAudioURL$Outbound,
  z.ZodTypeDef,
  AudioURLChunkAudioURL
> = z.union([AudioURL$outboundSchema, z.string()]);

export function audioURLChunkAudioURLToJSON(
  audioURLChunkAudioURL: AudioURLChunkAudioURL,
): string {
  return JSON.stringify(
    AudioURLChunkAudioURL$outboundSchema.parse(audioURLChunkAudioURL),
  );
}
export function audioURLChunkAudioURLFromJSON(
  jsonString: string,
): SafeParseResult<AudioURLChunkAudioURL, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => AudioURLChunkAudioURL$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'AudioURLChunkAudioURL' from JSON`,
  );
}

/** @internal */
export const AudioURLChunk$inboundSchema: z.ZodType<
  AudioURLChunk,
  z.ZodTypeDef,
  unknown
> = z.object({
  type: z.literal("audio_url").default("audio_url"),
  audio_url: z.union([AudioURL$inboundSchema, z.string()]),
}).transform((v) => {
  return remap$(v, {
    "audio_url": "audioUrl",
  });
});
/** @internal */
export type AudioURLChunk$Outbound = {
  type: "audio_url";
  audio_url: AudioURL$Outbound | string;
};

/** @internal */
export const AudioURLChunk$outboundSchema: z.ZodType<
  AudioURLChunk$Outbound,
  z.ZodTypeDef,
  AudioURLChunk
> = z.object({
  type: z.literal("audio_url").default("audio_url" as const),
  audioUrl: z.union([AudioURL$outboundSchema, z.string()]),
}).transform((v) => {
  return remap$(v, {
    audioUrl: "audio_url",
  });
});

export function audioURLChunkToJSON(audioURLChunk: AudioURLChunk): string {
  return JSON.stringify(AudioURLChunk$outboundSchema.parse(audioURLChunk));
}
export function audioURLChunkFromJSON(
  jsonString: string,
): SafeParseResult<AudioURLChunk, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => AudioURLChunk$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'AudioURLChunk' from JSON`,
  );
}
