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

import * as z from "zod/v3";
import { safeParse } from "../lib/schemas.js";
import { Result as SafeParseResult } from "../types/fp.js";
import * as types from "../types/primitives.js";
import { smartUnion } from "../types/smartUnion.js";
import { AuthToken, AuthToken$inboundSchema } from "./authtoken.js";
import { Pagination, Pagination$inboundSchema } from "./pagination.js";
import { SDKValidationError } from "./sdkvalidationerror.js";

export type ListAuthTokensResponseBody2 = {
  tokens: Array<AuthToken>;
  /**
   * This object contains information related to the pagination of the current request, including the necessary parameters to get the next or previous page of data.
   */
  pagination: Pagination;
};

export type ListAuthTokensResponseBodyPagination = {
  count: number;
  next: string | null;
  prev: string | null;
};

export type ListAuthTokensResponseBody1 = {
  tokens: Array<AuthToken>;
  pagination: ListAuthTokensResponseBodyPagination;
};

export type ListAuthTokensResponseBody =
  | ListAuthTokensResponseBody1
  | ListAuthTokensResponseBody2;

/** @internal */
export const ListAuthTokensResponseBody2$inboundSchema: z.ZodType<
  ListAuthTokensResponseBody2,
  z.ZodTypeDef,
  unknown
> = z.object({
  tokens: z.array(AuthToken$inboundSchema),
  pagination: Pagination$inboundSchema,
});

export function listAuthTokensResponseBody2FromJSON(
  jsonString: string,
): SafeParseResult<ListAuthTokensResponseBody2, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => ListAuthTokensResponseBody2$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ListAuthTokensResponseBody2' from JSON`,
  );
}

/** @internal */
export const ListAuthTokensResponseBodyPagination$inboundSchema: z.ZodType<
  ListAuthTokensResponseBodyPagination,
  z.ZodTypeDef,
  unknown
> = z.object({
  count: types.number(),
  next: types.nullable(types.string()),
  prev: types.nullable(types.string()),
});

export function listAuthTokensResponseBodyPaginationFromJSON(
  jsonString: string,
): SafeParseResult<ListAuthTokensResponseBodyPagination, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) =>
      ListAuthTokensResponseBodyPagination$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ListAuthTokensResponseBodyPagination' from JSON`,
  );
}

/** @internal */
export const ListAuthTokensResponseBody1$inboundSchema: z.ZodType<
  ListAuthTokensResponseBody1,
  z.ZodTypeDef,
  unknown
> = z.object({
  tokens: z.array(AuthToken$inboundSchema),
  pagination: z.lazy(() => ListAuthTokensResponseBodyPagination$inboundSchema),
});

export function listAuthTokensResponseBody1FromJSON(
  jsonString: string,
): SafeParseResult<ListAuthTokensResponseBody1, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => ListAuthTokensResponseBody1$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ListAuthTokensResponseBody1' from JSON`,
  );
}

/** @internal */
export const ListAuthTokensResponseBody$inboundSchema: z.ZodType<
  ListAuthTokensResponseBody,
  z.ZodTypeDef,
  unknown
> = smartUnion([
  z.lazy(() => ListAuthTokensResponseBody1$inboundSchema),
  z.lazy(() => ListAuthTokensResponseBody2$inboundSchema),
]);

export function listAuthTokensResponseBodyFromJSON(
  jsonString: string,
): SafeParseResult<ListAuthTokensResponseBody, SDKValidationError> {
  return safeParse(
    jsonString,
    (x) => ListAuthTokensResponseBody$inboundSchema.parse(JSON.parse(x)),
    `Failed to parse 'ListAuthTokensResponseBody' from JSON`,
  );
}
