/*
 * 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 { ClosedEnum } from "../types/enums.js";

export const CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsCategory =
  {
    Experiment: "experiment",
    Flag: "flag",
  } as const;
export type CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsCategory =
  ClosedEnum<
    typeof CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsCategory
  >;

export type CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItems =
  {
    id: string;
    slug: string;
    origin: string;
    category?:
      | CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsCategory
      | undefined;
    name?: string | undefined;
    description?: string | undefined;
    isArchived?: boolean | undefined;
    createdAt?: number | undefined;
    updatedAt?: number | undefined;
  };

export type CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBody =
  {
    items: Array<
      CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItems
    >;
  };

export type CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequest =
  {
    integrationConfigurationId: string;
    resourceId: string;
    requestBody?:
      | CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBody
      | undefined;
  };

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

/** @internal */
export type CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItems$Outbound =
  {
    id: string;
    slug: string;
    origin: string;
    category?: string | undefined;
    name?: string | undefined;
    description?: string | undefined;
    isArchived?: boolean | undefined;
    createdAt?: number | undefined;
    updatedAt?: number | undefined;
  };

/** @internal */
export const CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItems$outboundSchema:
  z.ZodType<
    CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItems$Outbound,
    z.ZodTypeDef,
    CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItems
  > = z.object({
    id: z.string(),
    slug: z.string(),
    origin: z.string(),
    category:
      CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsCategory$outboundSchema
        .optional(),
    name: z.string().optional(),
    description: z.string().optional(),
    isArchived: z.boolean().optional(),
    createdAt: z.number().optional(),
    updatedAt: z.number().optional(),
  });

export function createInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItemsToJSON(
  createInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItems:
    CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItems,
): string {
  return JSON.stringify(
    CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItems$outboundSchema
      .parse(
        createInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItems,
      ),
  );
}

/** @internal */
export type CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBody$Outbound =
  {
    items: Array<
      CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItems$Outbound
    >;
  };

/** @internal */
export const CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBody$outboundSchema:
  z.ZodType<
    CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBody$Outbound,
    z.ZodTypeDef,
    CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBody
  > = z.object({
    items: z.array(
      z.lazy(() =>
        CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsItems$outboundSchema
      ),
    ),
  });

export function createInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBodyToJSON(
  createInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBody:
    CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBody,
): string {
  return JSON.stringify(
    CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBody$outboundSchema
      .parse(
        createInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBody,
      ),
  );
}

/** @internal */
export type CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequest$Outbound =
  {
    integrationConfigurationId: string;
    resourceId: string;
    RequestBody?:
      | CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBody$Outbound
      | undefined;
  };

/** @internal */
export const CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequest$outboundSchema:
  z.ZodType<
    CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequest$Outbound,
    z.ZodTypeDef,
    CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequest
  > = z.object({
    integrationConfigurationId: z.string(),
    resourceId: z.string(),
    requestBody: z.lazy(() =>
      CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestBody$outboundSchema
    ).optional(),
  }).transform((v) => {
    return remap$(v, {
      requestBody: "RequestBody",
    });
  });

export function createInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequestToJSON(
  createInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequest:
    CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequest,
): string {
  return JSON.stringify(
    CreateInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequest$outboundSchema
      .parse(
        createInstallationsByIntegrationConfigurationIdResourcesByResourceIdExperimentationItemsRequest,
      ),
  );
}
