/*
 * 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 { smartUnion } from "../types/smartUnion.js";
import { AuthUser, AuthUser$inboundSchema } from "./authuser.js";
import {
  AuthUserLimited,
  AuthUserLimited$inboundSchema,
} from "./authuserlimited.js";
import { SDKValidationError } from "./sdkvalidationerror.js";

export type GetAuthUserUser = AuthUser | AuthUserLimited;

/**
 * Successful response.
 */
export type GetAuthUserResponseBody = {
  user: AuthUser | AuthUserLimited;
};

/** @internal */
export const GetAuthUserUser$inboundSchema: z.ZodType<
  GetAuthUserUser,
  z.ZodTypeDef,
  unknown
> = smartUnion([AuthUser$inboundSchema, AuthUserLimited$inboundSchema]);

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

/** @internal */
export const GetAuthUserResponseBody$inboundSchema: z.ZodType<
  GetAuthUserResponseBody,
  z.ZodTypeDef,
  unknown
> = z.object({
  user: smartUnion([AuthUser$inboundSchema, AuthUserLimited$inboundSchema]),
});

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