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

import * as z from "zod/v3";
import { remap as remap$ } from "../lib/primitives.js";
import { safeParse } from "../lib/schemas.js";
import { ClosedEnum } from "../types/enums.js";
import { Result as SafeParseResult } from "../types/fp.js";
import * as types from "../types/primitives.js";
import { smartUnion } from "../types/smartUnion.js";
import { SDKValidationError } from "./sdkvalidationerror.js";

export const PatchEdgeConfigItems1Operation = {
  Create: "create",
  Update: "update",
  Upsert: "upsert",
  Delete: "delete",
} as const;
export type PatchEdgeConfigItems1Operation = ClosedEnum<
  typeof PatchEdgeConfigItems1Operation
>;

export type PatchEdgeConfigItems1Description = string | any;

export type PatchEdgeConfigItems13 = {
  operation: PatchEdgeConfigItems1Operation;
  key: string;
  value?: any | null | undefined;
  description?: string | any | null | undefined;
};

export const OneOperation = {
  Create: "create",
  Update: "update",
  Upsert: "upsert",
  Delete: "delete",
} as const;
export type OneOperation = ClosedEnum<typeof OneOperation>;

export type OneDescription = string | any;

export type PatchEdgeConfigItems12 = {
  operation: OneOperation;
  key: string;
  value?: any | null | undefined;
  description?: string | any | null | undefined;
};

export const Operation = {
  Create: "create",
  Update: "update",
  Upsert: "upsert",
  Delete: "delete",
} as const;
export type Operation = ClosedEnum<typeof Operation>;

export type Description = string | any;

export type PatchEdgeConfigItems11 = {
  operation: Operation;
  key: string;
  value?: any | null | undefined;
  description?: string | any | null | undefined;
};

export type PatchEdgeConfigItemsItems1 =
  | PatchEdgeConfigItems11
  | PatchEdgeConfigItems12
  | PatchEdgeConfigItems13;

export type PatchEdgeConfigItemsItems =
  | PatchEdgeConfigItems11
  | PatchEdgeConfigItems12
  | PatchEdgeConfigItems13;

export type PatchEdgeConfigItemsRequestBody = {
  items: Array<
    PatchEdgeConfigItems11 | PatchEdgeConfigItems12 | PatchEdgeConfigItems13
  >;
};

export type PatchEdgeConfigItemsRequest = {
  edgeConfigId: string;
  /**
   * The Team identifier to perform the request on behalf of.
   */
  teamId?: string | undefined;
  /**
   * The Team slug to perform the request on behalf of.
   */
  slug?: string | undefined;
  requestBody?: PatchEdgeConfigItemsRequestBody | undefined;
};

export type PatchEdgeConfigItemsResponseBody = {
  status: string;
};

/** @internal */
export const PatchEdgeConfigItems1Operation$outboundSchema: z.ZodNativeEnum<
  typeof PatchEdgeConfigItems1Operation
> = z.nativeEnum(PatchEdgeConfigItems1Operation);

/** @internal */
export type PatchEdgeConfigItems1Description$Outbound = string | any;

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

export function patchEdgeConfigItems1DescriptionToJSON(
  patchEdgeConfigItems1Description: PatchEdgeConfigItems1Description,
): string {
  return JSON.stringify(
    PatchEdgeConfigItems1Description$outboundSchema.parse(
      patchEdgeConfigItems1Description,
    ),
  );
}

/** @internal */
export type PatchEdgeConfigItems13$Outbound = {
  operation: string;
  key: string;
  value?: any | null | undefined;
  description?: string | any | null | undefined;
};

/** @internal */
export const PatchEdgeConfigItems13$outboundSchema: z.ZodType<
  PatchEdgeConfigItems13$Outbound,
  z.ZodTypeDef,
  PatchEdgeConfigItems13
> = z.object({
  operation: PatchEdgeConfigItems1Operation$outboundSchema,
  key: z.string(),
  value: z.nullable(z.any()).optional(),
  description: z.nullable(smartUnion([z.string(), z.any()])).optional(),
});

export function patchEdgeConfigItems13ToJSON(
  patchEdgeConfigItems13: PatchEdgeConfigItems13,
): string {
  return JSON.stringify(
    PatchEdgeConfigItems13$outboundSchema.parse(patchEdgeConfigItems13),
  );
}

/** @internal */
export const OneOperation$outboundSchema: z.ZodNativeEnum<typeof OneOperation> =
  z.nativeEnum(OneOperation);

/** @internal */
export type OneDescription$Outbound = string | any;

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

export function oneDescriptionToJSON(oneDescription: OneDescription): string {
  return JSON.stringify(OneDescription$outboundSchema.parse(oneDescription));
}

/** @internal */
export type PatchEdgeConfigItems12$Outbound = {
  operation: string;
  key: string;
  value?: any | null | undefined;
  description?: string | any | null | undefined;
};

/** @internal */
export const PatchEdgeConfigItems12$outboundSchema: z.ZodType<
  PatchEdgeConfigItems12$Outbound,
  z.ZodTypeDef,
  PatchEdgeConfigItems12
> = z.object({
  operation: OneOperation$outboundSchema,
  key: z.string(),
  value: z.nullable(z.any()).optional(),
  description: z.nullable(smartUnion([z.string(), z.any()])).optional(),
});

export function patchEdgeConfigItems12ToJSON(
  patchEdgeConfigItems12: PatchEdgeConfigItems12,
): string {
  return JSON.stringify(
    PatchEdgeConfigItems12$outboundSchema.parse(patchEdgeConfigItems12),
  );
}

/** @internal */
export const Operation$outboundSchema: z.ZodNativeEnum<typeof Operation> = z
  .nativeEnum(Operation);

/** @internal */
export type Description$Outbound = string | any;

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

export function descriptionToJSON(description: Description): string {
  return JSON.stringify(Description$outboundSchema.parse(description));
}

/** @internal */
export type PatchEdgeConfigItems11$Outbound = {
  operation: string;
  key: string;
  value?: any | null | undefined;
  description?: string | any | null | undefined;
};

/** @internal */
export const PatchEdgeConfigItems11$outboundSchema: z.ZodType<
  PatchEdgeConfigItems11$Outbound,
  z.ZodTypeDef,
  PatchEdgeConfigItems11
> = z.object({
  operation: Operation$outboundSchema,
  key: z.string(),
  value: z.nullable(z.any()).optional(),
  description: z.nullable(smartUnion([z.string(), z.any()])).optional(),
});

export function patchEdgeConfigItems11ToJSON(
  patchEdgeConfigItems11: PatchEdgeConfigItems11,
): string {
  return JSON.stringify(
    PatchEdgeConfigItems11$outboundSchema.parse(patchEdgeConfigItems11),
  );
}

/** @internal */
export type PatchEdgeConfigItemsItems1$Outbound =
  | PatchEdgeConfigItems11$Outbound
  | PatchEdgeConfigItems12$Outbound
  | PatchEdgeConfigItems13$Outbound;

/** @internal */
export const PatchEdgeConfigItemsItems1$outboundSchema: z.ZodType<
  PatchEdgeConfigItemsItems1$Outbound,
  z.ZodTypeDef,
  PatchEdgeConfigItemsItems1
> = smartUnion([
  z.lazy(() => PatchEdgeConfigItems11$outboundSchema),
  z.lazy(() => PatchEdgeConfigItems12$outboundSchema),
  z.lazy(() => PatchEdgeConfigItems13$outboundSchema),
]);

export function patchEdgeConfigItemsItems1ToJSON(
  patchEdgeConfigItemsItems1: PatchEdgeConfigItemsItems1,
): string {
  return JSON.stringify(
    PatchEdgeConfigItemsItems1$outboundSchema.parse(patchEdgeConfigItemsItems1),
  );
}

/** @internal */
export type PatchEdgeConfigItemsItems$Outbound =
  | PatchEdgeConfigItems11$Outbound
  | PatchEdgeConfigItems12$Outbound
  | PatchEdgeConfigItems13$Outbound;

/** @internal */
export const PatchEdgeConfigItemsItems$outboundSchema: z.ZodType<
  PatchEdgeConfigItemsItems$Outbound,
  z.ZodTypeDef,
  PatchEdgeConfigItemsItems
> = smartUnion([
  z.lazy(() => PatchEdgeConfigItems11$outboundSchema),
  z.lazy(() => PatchEdgeConfigItems12$outboundSchema),
  z.lazy(() => PatchEdgeConfigItems13$outboundSchema),
]);

export function patchEdgeConfigItemsItemsToJSON(
  patchEdgeConfigItemsItems: PatchEdgeConfigItemsItems,
): string {
  return JSON.stringify(
    PatchEdgeConfigItemsItems$outboundSchema.parse(patchEdgeConfigItemsItems),
  );
}

/** @internal */
export type PatchEdgeConfigItemsRequestBody$Outbound = {
  items: Array<
    | PatchEdgeConfigItems11$Outbound
    | PatchEdgeConfigItems12$Outbound
    | PatchEdgeConfigItems13$Outbound
  >;
};

/** @internal */
export const PatchEdgeConfigItemsRequestBody$outboundSchema: z.ZodType<
  PatchEdgeConfigItemsRequestBody$Outbound,
  z.ZodTypeDef,
  PatchEdgeConfigItemsRequestBody
> = z.object({
  items: z.array(
    smartUnion([
      z.lazy(() => PatchEdgeConfigItems11$outboundSchema),
      z.lazy(() => PatchEdgeConfigItems12$outboundSchema),
      z.lazy(() => PatchEdgeConfigItems13$outboundSchema),
    ]),
  ),
});

export function patchEdgeConfigItemsRequestBodyToJSON(
  patchEdgeConfigItemsRequestBody: PatchEdgeConfigItemsRequestBody,
): string {
  return JSON.stringify(
    PatchEdgeConfigItemsRequestBody$outboundSchema.parse(
      patchEdgeConfigItemsRequestBody,
    ),
  );
}

/** @internal */
export type PatchEdgeConfigItemsRequest$Outbound = {
  edgeConfigId: string;
  teamId?: string | undefined;
  slug?: string | undefined;
  RequestBody?: PatchEdgeConfigItemsRequestBody$Outbound | undefined;
};

/** @internal */
export const PatchEdgeConfigItemsRequest$outboundSchema: z.ZodType<
  PatchEdgeConfigItemsRequest$Outbound,
  z.ZodTypeDef,
  PatchEdgeConfigItemsRequest
> = z.object({
  edgeConfigId: z.string(),
  teamId: z.string().optional(),
  slug: z.string().optional(),
  requestBody: z.lazy(() => PatchEdgeConfigItemsRequestBody$outboundSchema)
    .optional(),
}).transform((v) => {
  return remap$(v, {
    requestBody: "RequestBody",
  });
});

export function patchEdgeConfigItemsRequestToJSON(
  patchEdgeConfigItemsRequest: PatchEdgeConfigItemsRequest,
): string {
  return JSON.stringify(
    PatchEdgeConfigItemsRequest$outboundSchema.parse(
      patchEdgeConfigItemsRequest,
    ),
  );
}

/** @internal */
export const PatchEdgeConfigItemsResponseBody$inboundSchema: z.ZodType<
  PatchEdgeConfigItemsResponseBody,
  z.ZodTypeDef,
  unknown
> = z.object({
  status: types.string(),
});

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