// Code generated by protoc-gen-ts_proto. DO NOT EDIT.
// source: cerbos/response/v1/response.proto

/* eslint-disable */
import { Empty } from "../../../google/protobuf/empty";
import { AccessLogEntry, DecisionLogEntry } from "../../audit/v1/audit";
import { Effect, effectFromJSON, effectToJSON } from "../../effect/v1/effect";
import { OutputEntry, PlanResourcesFilter } from "../../engine/v1/engine";
import { Policy } from "../../policy/v1/policy";
import { Schema, ValidationError } from "../../schema/v1/schema";

export const protobufPackage = "cerbos.response.v1";

export interface PlanResourcesResponse {
  requestId: string;
  action: string;
  resourceKind: string;
  policyVersion: string;
  filter: PlanResourcesFilter | undefined;
  meta: PlanResourcesResponse_Meta | undefined;
  validationErrors: ValidationError[];
  cerbosCallId: string;
}

export interface PlanResourcesResponse_Meta {
  filterDebug: string;
  matchedScope: string;
}

export interface CheckResourceSetResponse {
  requestId: string;
  resourceInstances: {
    [key: string]: CheckResourceSetResponse_ActionEffectMap;
  };
  meta: CheckResourceSetResponse_Meta | undefined;
}

export interface CheckResourceSetResponse_ActionEffectMap {
  actions: { [key: string]: Effect };
  validationErrors: ValidationError[];
}

export interface CheckResourceSetResponse_ActionEffectMap_ActionsEntry {
  key: string;
  value: Effect;
}

export interface CheckResourceSetResponse_Meta {
  resourceInstances: {
    [key: string]: CheckResourceSetResponse_Meta_ActionMeta;
  };
}

export interface CheckResourceSetResponse_Meta_EffectMeta {
  matchedPolicy: string;
  matchedScope: string;
}

export interface CheckResourceSetResponse_Meta_ActionMeta {
  actions: { [key: string]: CheckResourceSetResponse_Meta_EffectMeta };
  effectiveDerivedRoles: string[];
}

export interface CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry {
  key: string;
  value: CheckResourceSetResponse_Meta_EffectMeta | undefined;
}

export interface CheckResourceSetResponse_Meta_ResourceInstancesEntry {
  key: string;
  value: CheckResourceSetResponse_Meta_ActionMeta | undefined;
}

export interface CheckResourceSetResponse_ResourceInstancesEntry {
  key: string;
  value: CheckResourceSetResponse_ActionEffectMap | undefined;
}

export interface CheckResourceBatchResponse {
  requestId: string;
  results: CheckResourceBatchResponse_ActionEffectMap[];
}

export interface CheckResourceBatchResponse_ActionEffectMap {
  resourceId: string;
  actions: { [key: string]: Effect };
  validationErrors: ValidationError[];
}

export interface CheckResourceBatchResponse_ActionEffectMap_ActionsEntry {
  key: string;
  value: Effect;
}

export interface CheckResourcesResponse {
  requestId: string;
  results: CheckResourcesResponse_ResultEntry[];
  cerbosCallId: string;
}

export interface CheckResourcesResponse_ResultEntry {
  resource: CheckResourcesResponse_ResultEntry_Resource | undefined;
  actions: { [key: string]: Effect };
  validationErrors: ValidationError[];
  meta: CheckResourcesResponse_ResultEntry_Meta | undefined;
  outputs: OutputEntry[];
}

export interface CheckResourcesResponse_ResultEntry_Resource {
  id: string;
  kind: string;
  policyVersion: string;
  scope: string;
}

export interface CheckResourcesResponse_ResultEntry_Meta {
  actions: {
    [key: string]: CheckResourcesResponse_ResultEntry_Meta_EffectMeta;
  };
  effectiveDerivedRoles: string[];
}

export interface CheckResourcesResponse_ResultEntry_Meta_EffectMeta {
  matchedPolicy: string;
  matchedScope: string;
}

export interface CheckResourcesResponse_ResultEntry_Meta_ActionsEntry {
  key: string;
  value: CheckResourcesResponse_ResultEntry_Meta_EffectMeta | undefined;
}

export interface CheckResourcesResponse_ResultEntry_ActionsEntry {
  key: string;
  value: Effect;
}

export interface AddOrUpdatePolicyResponse {
  success: Empty | undefined;
}

export interface ListAuditLogEntriesResponse {
  entry?:
    | { $case: "accessLogEntry"; accessLogEntry: AccessLogEntry }
    | {
        $case: "decisionLogEntry";
        decisionLogEntry: DecisionLogEntry;
      }
    | undefined;
}

export interface ServerInfoResponse {
  version: string;
  commit: string;
  buildDate: string;
}

export interface ListPoliciesResponse {
  policyIds: string[];
}

export interface GetPolicyResponse {
  policies: Policy[];
}

export interface DisablePolicyResponse {
  disabledPolicies: number;
}

export interface EnablePolicyResponse {
  enabledPolicies: number;
}

export interface InspectPoliciesResponse {
  results: { [key: string]: InspectPoliciesResponse_Result };
}

export interface InspectPoliciesResponse_Attribute {
  kind: InspectPoliciesResponse_Attribute_Kind;
  name: string;
}

export enum InspectPoliciesResponse_Attribute_Kind {
  KIND_UNSPECIFIED = 0,
  KIND_PRINCIPAL_ATTRIBUTE = 1,
  KIND_RESOURCE_ATTRIBUTE = 2,
}

export function inspectPoliciesResponse_Attribute_KindFromJSON(
  object: any,
): InspectPoliciesResponse_Attribute_Kind {
  switch (object) {
    case 0:
    case "KIND_UNSPECIFIED":
      return InspectPoliciesResponse_Attribute_Kind.KIND_UNSPECIFIED;
    case 1:
    case "KIND_PRINCIPAL_ATTRIBUTE":
      return InspectPoliciesResponse_Attribute_Kind.KIND_PRINCIPAL_ATTRIBUTE;
    case 2:
    case "KIND_RESOURCE_ATTRIBUTE":
      return InspectPoliciesResponse_Attribute_Kind.KIND_RESOURCE_ATTRIBUTE;
    default:
      throw new globalThis.Error(
        "Unrecognized enum value " +
          object +
          " for enum InspectPoliciesResponse_Attribute_Kind",
      );
  }
}

export function inspectPoliciesResponse_Attribute_KindToJSON(
  object: InspectPoliciesResponse_Attribute_Kind,
): string {
  switch (object) {
    case InspectPoliciesResponse_Attribute_Kind.KIND_UNSPECIFIED:
      return "KIND_UNSPECIFIED";
    case InspectPoliciesResponse_Attribute_Kind.KIND_PRINCIPAL_ATTRIBUTE:
      return "KIND_PRINCIPAL_ATTRIBUTE";
    case InspectPoliciesResponse_Attribute_Kind.KIND_RESOURCE_ATTRIBUTE:
      return "KIND_RESOURCE_ATTRIBUTE";
    default:
      throw new globalThis.Error(
        "Unrecognized enum value " +
          object +
          " for enum InspectPoliciesResponse_Attribute_Kind",
      );
  }
}

export interface InspectPoliciesResponse_DerivedRole {
  name: string;
  kind: InspectPoliciesResponse_DerivedRole_Kind;
  source: string;
}

export enum InspectPoliciesResponse_DerivedRole_Kind {
  KIND_UNSPECIFIED = 0,
  KIND_UNDEFINED = 1,
  KIND_EXPORTED = 2,
  KIND_IMPORTED = 3,
}

export function inspectPoliciesResponse_DerivedRole_KindFromJSON(
  object: any,
): InspectPoliciesResponse_DerivedRole_Kind {
  switch (object) {
    case 0:
    case "KIND_UNSPECIFIED":
      return InspectPoliciesResponse_DerivedRole_Kind.KIND_UNSPECIFIED;
    case 1:
    case "KIND_UNDEFINED":
      return InspectPoliciesResponse_DerivedRole_Kind.KIND_UNDEFINED;
    case 2:
    case "KIND_EXPORTED":
      return InspectPoliciesResponse_DerivedRole_Kind.KIND_EXPORTED;
    case 3:
    case "KIND_IMPORTED":
      return InspectPoliciesResponse_DerivedRole_Kind.KIND_IMPORTED;
    default:
      throw new globalThis.Error(
        "Unrecognized enum value " +
          object +
          " for enum InspectPoliciesResponse_DerivedRole_Kind",
      );
  }
}

export function inspectPoliciesResponse_DerivedRole_KindToJSON(
  object: InspectPoliciesResponse_DerivedRole_Kind,
): string {
  switch (object) {
    case InspectPoliciesResponse_DerivedRole_Kind.KIND_UNSPECIFIED:
      return "KIND_UNSPECIFIED";
    case InspectPoliciesResponse_DerivedRole_Kind.KIND_UNDEFINED:
      return "KIND_UNDEFINED";
    case InspectPoliciesResponse_DerivedRole_Kind.KIND_EXPORTED:
      return "KIND_EXPORTED";
    case InspectPoliciesResponse_DerivedRole_Kind.KIND_IMPORTED:
      return "KIND_IMPORTED";
    default:
      throw new globalThis.Error(
        "Unrecognized enum value " +
          object +
          " for enum InspectPoliciesResponse_DerivedRole_Kind",
      );
  }
}

export interface InspectPoliciesResponse_Constant {
  name: string;
  value: any | undefined;
  kind: InspectPoliciesResponse_Constant_Kind;
  source: string;
  used: boolean;
}

export enum InspectPoliciesResponse_Constant_Kind {
  KIND_UNSPECIFIED = 0,
  KIND_EXPORTED = 1,
  KIND_IMPORTED = 2,
  KIND_LOCAL = 3,
  KIND_UNDEFINED = 4,
  KIND_UNKNOWN = 5,
}

export function inspectPoliciesResponse_Constant_KindFromJSON(
  object: any,
): InspectPoliciesResponse_Constant_Kind {
  switch (object) {
    case 0:
    case "KIND_UNSPECIFIED":
      return InspectPoliciesResponse_Constant_Kind.KIND_UNSPECIFIED;
    case 1:
    case "KIND_EXPORTED":
      return InspectPoliciesResponse_Constant_Kind.KIND_EXPORTED;
    case 2:
    case "KIND_IMPORTED":
      return InspectPoliciesResponse_Constant_Kind.KIND_IMPORTED;
    case 3:
    case "KIND_LOCAL":
      return InspectPoliciesResponse_Constant_Kind.KIND_LOCAL;
    case 4:
    case "KIND_UNDEFINED":
      return InspectPoliciesResponse_Constant_Kind.KIND_UNDEFINED;
    case 5:
    case "KIND_UNKNOWN":
      return InspectPoliciesResponse_Constant_Kind.KIND_UNKNOWN;
    default:
      throw new globalThis.Error(
        "Unrecognized enum value " +
          object +
          " for enum InspectPoliciesResponse_Constant_Kind",
      );
  }
}

export function inspectPoliciesResponse_Constant_KindToJSON(
  object: InspectPoliciesResponse_Constant_Kind,
): string {
  switch (object) {
    case InspectPoliciesResponse_Constant_Kind.KIND_UNSPECIFIED:
      return "KIND_UNSPECIFIED";
    case InspectPoliciesResponse_Constant_Kind.KIND_EXPORTED:
      return "KIND_EXPORTED";
    case InspectPoliciesResponse_Constant_Kind.KIND_IMPORTED:
      return "KIND_IMPORTED";
    case InspectPoliciesResponse_Constant_Kind.KIND_LOCAL:
      return "KIND_LOCAL";
    case InspectPoliciesResponse_Constant_Kind.KIND_UNDEFINED:
      return "KIND_UNDEFINED";
    case InspectPoliciesResponse_Constant_Kind.KIND_UNKNOWN:
      return "KIND_UNKNOWN";
    default:
      throw new globalThis.Error(
        "Unrecognized enum value " +
          object +
          " for enum InspectPoliciesResponse_Constant_Kind",
      );
  }
}

export interface InspectPoliciesResponse_Variable {
  name: string;
  value: string;
  kind: InspectPoliciesResponse_Variable_Kind;
  source: string;
  used: boolean;
}

export enum InspectPoliciesResponse_Variable_Kind {
  KIND_UNSPECIFIED = 0,
  KIND_EXPORTED = 1,
  KIND_IMPORTED = 2,
  KIND_LOCAL = 3,
  KIND_UNDEFINED = 4,
  KIND_UNKNOWN = 5,
}

export function inspectPoliciesResponse_Variable_KindFromJSON(
  object: any,
): InspectPoliciesResponse_Variable_Kind {
  switch (object) {
    case 0:
    case "KIND_UNSPECIFIED":
      return InspectPoliciesResponse_Variable_Kind.KIND_UNSPECIFIED;
    case 1:
    case "KIND_EXPORTED":
      return InspectPoliciesResponse_Variable_Kind.KIND_EXPORTED;
    case 2:
    case "KIND_IMPORTED":
      return InspectPoliciesResponse_Variable_Kind.KIND_IMPORTED;
    case 3:
    case "KIND_LOCAL":
      return InspectPoliciesResponse_Variable_Kind.KIND_LOCAL;
    case 4:
    case "KIND_UNDEFINED":
      return InspectPoliciesResponse_Variable_Kind.KIND_UNDEFINED;
    case 5:
    case "KIND_UNKNOWN":
      return InspectPoliciesResponse_Variable_Kind.KIND_UNKNOWN;
    default:
      throw new globalThis.Error(
        "Unrecognized enum value " +
          object +
          " for enum InspectPoliciesResponse_Variable_Kind",
      );
  }
}

export function inspectPoliciesResponse_Variable_KindToJSON(
  object: InspectPoliciesResponse_Variable_Kind,
): string {
  switch (object) {
    case InspectPoliciesResponse_Variable_Kind.KIND_UNSPECIFIED:
      return "KIND_UNSPECIFIED";
    case InspectPoliciesResponse_Variable_Kind.KIND_EXPORTED:
      return "KIND_EXPORTED";
    case InspectPoliciesResponse_Variable_Kind.KIND_IMPORTED:
      return "KIND_IMPORTED";
    case InspectPoliciesResponse_Variable_Kind.KIND_LOCAL:
      return "KIND_LOCAL";
    case InspectPoliciesResponse_Variable_Kind.KIND_UNDEFINED:
      return "KIND_UNDEFINED";
    case InspectPoliciesResponse_Variable_Kind.KIND_UNKNOWN:
      return "KIND_UNKNOWN";
    default:
      throw new globalThis.Error(
        "Unrecognized enum value " +
          object +
          " for enum InspectPoliciesResponse_Variable_Kind",
      );
  }
}

export interface InspectPoliciesResponse_Result {
  actions: string[];
  variables: InspectPoliciesResponse_Variable[];
  policyId: string;
  derivedRoles: InspectPoliciesResponse_DerivedRole[];
  attributes: InspectPoliciesResponse_Attribute[];
  constants: InspectPoliciesResponse_Constant[];
}

export interface InspectPoliciesResponse_ResultsEntry {
  key: string;
  value: InspectPoliciesResponse_Result | undefined;
}

export interface AddOrUpdateSchemaResponse {}

export interface ListSchemasResponse {
  schemaIds: string[];
}

export interface GetSchemaResponse {
  schemas: Schema[];
}

export interface DeleteSchemaResponse {
  deletedSchemas: number;
}

export interface ReloadStoreResponse {}

export const PlanResourcesResponse: MessageFns<PlanResourcesResponse> = {
  fromJSON(object: any): PlanResourcesResponse {
    return {
      requestId: isSet(object.requestId)
        ? globalThis.String(object.requestId)
        : "",
      action: isSet(object.action) ? globalThis.String(object.action) : "",
      resourceKind: isSet(object.resourceKind)
        ? globalThis.String(object.resourceKind)
        : "",
      policyVersion: isSet(object.policyVersion)
        ? globalThis.String(object.policyVersion)
        : "",
      filter: isSet(object.filter)
        ? PlanResourcesFilter.fromJSON(object.filter)
        : undefined,
      meta: isSet(object.meta)
        ? PlanResourcesResponse_Meta.fromJSON(object.meta)
        : undefined,
      validationErrors: globalThis.Array.isArray(object?.validationErrors)
        ? object.validationErrors.map((e: any) => ValidationError.fromJSON(e))
        : [],
      cerbosCallId: isSet(object.cerbosCallId)
        ? globalThis.String(object.cerbosCallId)
        : "",
    };
  },

  toJSON(message: PlanResourcesResponse): unknown {
    const obj: any = {};
    if (message.requestId !== "") {
      obj.requestId = message.requestId;
    }
    if (message.action !== "") {
      obj.action = message.action;
    }
    if (message.resourceKind !== "") {
      obj.resourceKind = message.resourceKind;
    }
    if (message.policyVersion !== "") {
      obj.policyVersion = message.policyVersion;
    }
    if (message.filter !== undefined) {
      obj.filter = PlanResourcesFilter.toJSON(message.filter);
    }
    if (message.meta !== undefined) {
      obj.meta = PlanResourcesResponse_Meta.toJSON(message.meta);
    }
    if (message.validationErrors?.length) {
      obj.validationErrors = message.validationErrors.map((e) =>
        ValidationError.toJSON(e),
      );
    }
    if (message.cerbosCallId !== "") {
      obj.cerbosCallId = message.cerbosCallId;
    }
    return obj;
  },
};

export const PlanResourcesResponse_Meta: MessageFns<PlanResourcesResponse_Meta> =
  {
    fromJSON(object: any): PlanResourcesResponse_Meta {
      return {
        filterDebug: isSet(object.filterDebug)
          ? globalThis.String(object.filterDebug)
          : "",
        matchedScope: isSet(object.matchedScope)
          ? globalThis.String(object.matchedScope)
          : "",
      };
    },

    toJSON(message: PlanResourcesResponse_Meta): unknown {
      const obj: any = {};
      if (message.filterDebug !== "") {
        obj.filterDebug = message.filterDebug;
      }
      if (message.matchedScope !== "") {
        obj.matchedScope = message.matchedScope;
      }
      return obj;
    },
  };

export const CheckResourceSetResponse: MessageFns<CheckResourceSetResponse> = {
  fromJSON(object: any): CheckResourceSetResponse {
    return {
      requestId: isSet(object.requestId)
        ? globalThis.String(object.requestId)
        : "",
      resourceInstances: isObject(object.resourceInstances)
        ? Object.entries(object.resourceInstances).reduce<{
            [key: string]: CheckResourceSetResponse_ActionEffectMap;
          }>((acc, [key, value]) => {
            acc[key] = CheckResourceSetResponse_ActionEffectMap.fromJSON(value);
            return acc;
          }, {})
        : {},
      meta: isSet(object.meta)
        ? CheckResourceSetResponse_Meta.fromJSON(object.meta)
        : undefined,
    };
  },

  toJSON(message: CheckResourceSetResponse): unknown {
    const obj: any = {};
    if (message.requestId !== "") {
      obj.requestId = message.requestId;
    }
    if (message.resourceInstances) {
      const entries = Object.entries(message.resourceInstances);
      if (entries.length > 0) {
        obj.resourceInstances = {};
        entries.forEach(([k, v]) => {
          obj.resourceInstances[k] =
            CheckResourceSetResponse_ActionEffectMap.toJSON(v);
        });
      }
    }
    if (message.meta !== undefined) {
      obj.meta = CheckResourceSetResponse_Meta.toJSON(message.meta);
    }
    return obj;
  },
};

export const CheckResourceSetResponse_ActionEffectMap: MessageFns<CheckResourceSetResponse_ActionEffectMap> =
  {
    fromJSON(object: any): CheckResourceSetResponse_ActionEffectMap {
      return {
        actions: isObject(object.actions)
          ? Object.entries(object.actions).reduce<{ [key: string]: Effect }>(
              (acc, [key, value]) => {
                acc[key] = effectFromJSON(value);
                return acc;
              },
              {},
            )
          : {},
        validationErrors: globalThis.Array.isArray(object?.validationErrors)
          ? object.validationErrors.map((e: any) => ValidationError.fromJSON(e))
          : [],
      };
    },

    toJSON(message: CheckResourceSetResponse_ActionEffectMap): unknown {
      const obj: any = {};
      if (message.actions) {
        const entries = Object.entries(message.actions);
        if (entries.length > 0) {
          obj.actions = {};
          entries.forEach(([k, v]) => {
            obj.actions[k] = effectToJSON(v);
          });
        }
      }
      if (message.validationErrors?.length) {
        obj.validationErrors = message.validationErrors.map((e) =>
          ValidationError.toJSON(e),
        );
      }
      return obj;
    },
  };

export const CheckResourceSetResponse_ActionEffectMap_ActionsEntry: MessageFns<CheckResourceSetResponse_ActionEffectMap_ActionsEntry> =
  {
    fromJSON(
      object: any,
    ): CheckResourceSetResponse_ActionEffectMap_ActionsEntry {
      return {
        key: isSet(object.key) ? globalThis.String(object.key) : "",
        value: isSet(object.value) ? effectFromJSON(object.value) : 0,
      };
    },

    toJSON(
      message: CheckResourceSetResponse_ActionEffectMap_ActionsEntry,
    ): unknown {
      const obj: any = {};
      if (message.key !== "") {
        obj.key = message.key;
      }
      if (message.value !== 0) {
        obj.value = effectToJSON(message.value);
      }
      return obj;
    },
  };

export const CheckResourceSetResponse_Meta: MessageFns<CheckResourceSetResponse_Meta> =
  {
    fromJSON(object: any): CheckResourceSetResponse_Meta {
      return {
        resourceInstances: isObject(object.resourceInstances)
          ? Object.entries(object.resourceInstances).reduce<{
              [key: string]: CheckResourceSetResponse_Meta_ActionMeta;
            }>((acc, [key, value]) => {
              acc[key] =
                CheckResourceSetResponse_Meta_ActionMeta.fromJSON(value);
              return acc;
            }, {})
          : {},
      };
    },

    toJSON(message: CheckResourceSetResponse_Meta): unknown {
      const obj: any = {};
      if (message.resourceInstances) {
        const entries = Object.entries(message.resourceInstances);
        if (entries.length > 0) {
          obj.resourceInstances = {};
          entries.forEach(([k, v]) => {
            obj.resourceInstances[k] =
              CheckResourceSetResponse_Meta_ActionMeta.toJSON(v);
          });
        }
      }
      return obj;
    },
  };

export const CheckResourceSetResponse_Meta_EffectMeta: MessageFns<CheckResourceSetResponse_Meta_EffectMeta> =
  {
    fromJSON(object: any): CheckResourceSetResponse_Meta_EffectMeta {
      return {
        matchedPolicy: isSet(object.matchedPolicy)
          ? globalThis.String(object.matchedPolicy)
          : "",
        matchedScope: isSet(object.matchedScope)
          ? globalThis.String(object.matchedScope)
          : "",
      };
    },

    toJSON(message: CheckResourceSetResponse_Meta_EffectMeta): unknown {
      const obj: any = {};
      if (message.matchedPolicy !== "") {
        obj.matchedPolicy = message.matchedPolicy;
      }
      if (message.matchedScope !== "") {
        obj.matchedScope = message.matchedScope;
      }
      return obj;
    },
  };

export const CheckResourceSetResponse_Meta_ActionMeta: MessageFns<CheckResourceSetResponse_Meta_ActionMeta> =
  {
    fromJSON(object: any): CheckResourceSetResponse_Meta_ActionMeta {
      return {
        actions: isObject(object.actions)
          ? Object.entries(object.actions).reduce<{
              [key: string]: CheckResourceSetResponse_Meta_EffectMeta;
            }>((acc, [key, value]) => {
              acc[key] =
                CheckResourceSetResponse_Meta_EffectMeta.fromJSON(value);
              return acc;
            }, {})
          : {},
        effectiveDerivedRoles: globalThis.Array.isArray(
          object?.effectiveDerivedRoles,
        )
          ? object.effectiveDerivedRoles.map((e: any) => globalThis.String(e))
          : [],
      };
    },

    toJSON(message: CheckResourceSetResponse_Meta_ActionMeta): unknown {
      const obj: any = {};
      if (message.actions) {
        const entries = Object.entries(message.actions);
        if (entries.length > 0) {
          obj.actions = {};
          entries.forEach(([k, v]) => {
            obj.actions[k] = CheckResourceSetResponse_Meta_EffectMeta.toJSON(v);
          });
        }
      }
      if (message.effectiveDerivedRoles?.length) {
        obj.effectiveDerivedRoles = message.effectiveDerivedRoles;
      }
      return obj;
    },
  };

export const CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry: MessageFns<CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry> =
  {
    fromJSON(
      object: any,
    ): CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry {
      return {
        key: isSet(object.key) ? globalThis.String(object.key) : "",
        value: isSet(object.value)
          ? CheckResourceSetResponse_Meta_EffectMeta.fromJSON(object.value)
          : undefined,
      };
    },

    toJSON(
      message: CheckResourceSetResponse_Meta_ActionMeta_ActionsEntry,
    ): unknown {
      const obj: any = {};
      if (message.key !== "") {
        obj.key = message.key;
      }
      if (message.value !== undefined) {
        obj.value = CheckResourceSetResponse_Meta_EffectMeta.toJSON(
          message.value,
        );
      }
      return obj;
    },
  };

export const CheckResourceSetResponse_Meta_ResourceInstancesEntry: MessageFns<CheckResourceSetResponse_Meta_ResourceInstancesEntry> =
  {
    fromJSON(
      object: any,
    ): CheckResourceSetResponse_Meta_ResourceInstancesEntry {
      return {
        key: isSet(object.key) ? globalThis.String(object.key) : "",
        value: isSet(object.value)
          ? CheckResourceSetResponse_Meta_ActionMeta.fromJSON(object.value)
          : undefined,
      };
    },

    toJSON(
      message: CheckResourceSetResponse_Meta_ResourceInstancesEntry,
    ): unknown {
      const obj: any = {};
      if (message.key !== "") {
        obj.key = message.key;
      }
      if (message.value !== undefined) {
        obj.value = CheckResourceSetResponse_Meta_ActionMeta.toJSON(
          message.value,
        );
      }
      return obj;
    },
  };

export const CheckResourceSetResponse_ResourceInstancesEntry: MessageFns<CheckResourceSetResponse_ResourceInstancesEntry> =
  {
    fromJSON(object: any): CheckResourceSetResponse_ResourceInstancesEntry {
      return {
        key: isSet(object.key) ? globalThis.String(object.key) : "",
        value: isSet(object.value)
          ? CheckResourceSetResponse_ActionEffectMap.fromJSON(object.value)
          : undefined,
      };
    },

    toJSON(message: CheckResourceSetResponse_ResourceInstancesEntry): unknown {
      const obj: any = {};
      if (message.key !== "") {
        obj.key = message.key;
      }
      if (message.value !== undefined) {
        obj.value = CheckResourceSetResponse_ActionEffectMap.toJSON(
          message.value,
        );
      }
      return obj;
    },
  };

export const CheckResourceBatchResponse: MessageFns<CheckResourceBatchResponse> =
  {
    fromJSON(object: any): CheckResourceBatchResponse {
      return {
        requestId: isSet(object.requestId)
          ? globalThis.String(object.requestId)
          : "",
        results: globalThis.Array.isArray(object?.results)
          ? object.results.map((e: any) =>
              CheckResourceBatchResponse_ActionEffectMap.fromJSON(e),
            )
          : [],
      };
    },

    toJSON(message: CheckResourceBatchResponse): unknown {
      const obj: any = {};
      if (message.requestId !== "") {
        obj.requestId = message.requestId;
      }
      if (message.results?.length) {
        obj.results = message.results.map((e) =>
          CheckResourceBatchResponse_ActionEffectMap.toJSON(e),
        );
      }
      return obj;
    },
  };

export const CheckResourceBatchResponse_ActionEffectMap: MessageFns<CheckResourceBatchResponse_ActionEffectMap> =
  {
    fromJSON(object: any): CheckResourceBatchResponse_ActionEffectMap {
      return {
        resourceId: isSet(object.resourceId)
          ? globalThis.String(object.resourceId)
          : "",
        actions: isObject(object.actions)
          ? Object.entries(object.actions).reduce<{ [key: string]: Effect }>(
              (acc, [key, value]) => {
                acc[key] = effectFromJSON(value);
                return acc;
              },
              {},
            )
          : {},
        validationErrors: globalThis.Array.isArray(object?.validationErrors)
          ? object.validationErrors.map((e: any) => ValidationError.fromJSON(e))
          : [],
      };
    },

    toJSON(message: CheckResourceBatchResponse_ActionEffectMap): unknown {
      const obj: any = {};
      if (message.resourceId !== "") {
        obj.resourceId = message.resourceId;
      }
      if (message.actions) {
        const entries = Object.entries(message.actions);
        if (entries.length > 0) {
          obj.actions = {};
          entries.forEach(([k, v]) => {
            obj.actions[k] = effectToJSON(v);
          });
        }
      }
      if (message.validationErrors?.length) {
        obj.validationErrors = message.validationErrors.map((e) =>
          ValidationError.toJSON(e),
        );
      }
      return obj;
    },
  };

export const CheckResourceBatchResponse_ActionEffectMap_ActionsEntry: MessageFns<CheckResourceBatchResponse_ActionEffectMap_ActionsEntry> =
  {
    fromJSON(
      object: any,
    ): CheckResourceBatchResponse_ActionEffectMap_ActionsEntry {
      return {
        key: isSet(object.key) ? globalThis.String(object.key) : "",
        value: isSet(object.value) ? effectFromJSON(object.value) : 0,
      };
    },

    toJSON(
      message: CheckResourceBatchResponse_ActionEffectMap_ActionsEntry,
    ): unknown {
      const obj: any = {};
      if (message.key !== "") {
        obj.key = message.key;
      }
      if (message.value !== 0) {
        obj.value = effectToJSON(message.value);
      }
      return obj;
    },
  };

export const CheckResourcesResponse: MessageFns<CheckResourcesResponse> = {
  fromJSON(object: any): CheckResourcesResponse {
    return {
      requestId: isSet(object.requestId)
        ? globalThis.String(object.requestId)
        : "",
      results: globalThis.Array.isArray(object?.results)
        ? object.results.map((e: any) =>
            CheckResourcesResponse_ResultEntry.fromJSON(e),
          )
        : [],
      cerbosCallId: isSet(object.cerbosCallId)
        ? globalThis.String(object.cerbosCallId)
        : "",
    };
  },

  toJSON(message: CheckResourcesResponse): unknown {
    const obj: any = {};
    if (message.requestId !== "") {
      obj.requestId = message.requestId;
    }
    if (message.results?.length) {
      obj.results = message.results.map((e) =>
        CheckResourcesResponse_ResultEntry.toJSON(e),
      );
    }
    if (message.cerbosCallId !== "") {
      obj.cerbosCallId = message.cerbosCallId;
    }
    return obj;
  },
};

export const CheckResourcesResponse_ResultEntry: MessageFns<CheckResourcesResponse_ResultEntry> =
  {
    fromJSON(object: any): CheckResourcesResponse_ResultEntry {
      return {
        resource: isSet(object.resource)
          ? CheckResourcesResponse_ResultEntry_Resource.fromJSON(
              object.resource,
            )
          : undefined,
        actions: isObject(object.actions)
          ? Object.entries(object.actions).reduce<{ [key: string]: Effect }>(
              (acc, [key, value]) => {
                acc[key] = effectFromJSON(value);
                return acc;
              },
              {},
            )
          : {},
        validationErrors: globalThis.Array.isArray(object?.validationErrors)
          ? object.validationErrors.map((e: any) => ValidationError.fromJSON(e))
          : [],
        meta: isSet(object.meta)
          ? CheckResourcesResponse_ResultEntry_Meta.fromJSON(object.meta)
          : undefined,
        outputs: globalThis.Array.isArray(object?.outputs)
          ? object.outputs.map((e: any) => OutputEntry.fromJSON(e))
          : [],
      };
    },

    toJSON(message: CheckResourcesResponse_ResultEntry): unknown {
      const obj: any = {};
      if (message.resource !== undefined) {
        obj.resource = CheckResourcesResponse_ResultEntry_Resource.toJSON(
          message.resource,
        );
      }
      if (message.actions) {
        const entries = Object.entries(message.actions);
        if (entries.length > 0) {
          obj.actions = {};
          entries.forEach(([k, v]) => {
            obj.actions[k] = effectToJSON(v);
          });
        }
      }
      if (message.validationErrors?.length) {
        obj.validationErrors = message.validationErrors.map((e) =>
          ValidationError.toJSON(e),
        );
      }
      if (message.meta !== undefined) {
        obj.meta = CheckResourcesResponse_ResultEntry_Meta.toJSON(message.meta);
      }
      if (message.outputs?.length) {
        obj.outputs = message.outputs.map((e) => OutputEntry.toJSON(e));
      }
      return obj;
    },
  };

export const CheckResourcesResponse_ResultEntry_Resource: MessageFns<CheckResourcesResponse_ResultEntry_Resource> =
  {
    fromJSON(object: any): CheckResourcesResponse_ResultEntry_Resource {
      return {
        id: isSet(object.id) ? globalThis.String(object.id) : "",
        kind: isSet(object.kind) ? globalThis.String(object.kind) : "",
        policyVersion: isSet(object.policyVersion)
          ? globalThis.String(object.policyVersion)
          : "",
        scope: isSet(object.scope) ? globalThis.String(object.scope) : "",
      };
    },

    toJSON(message: CheckResourcesResponse_ResultEntry_Resource): unknown {
      const obj: any = {};
      if (message.id !== "") {
        obj.id = message.id;
      }
      if (message.kind !== "") {
        obj.kind = message.kind;
      }
      if (message.policyVersion !== "") {
        obj.policyVersion = message.policyVersion;
      }
      if (message.scope !== "") {
        obj.scope = message.scope;
      }
      return obj;
    },
  };

export const CheckResourcesResponse_ResultEntry_Meta: MessageFns<CheckResourcesResponse_ResultEntry_Meta> =
  {
    fromJSON(object: any): CheckResourcesResponse_ResultEntry_Meta {
      return {
        actions: isObject(object.actions)
          ? Object.entries(object.actions).reduce<{
              [key: string]: CheckResourcesResponse_ResultEntry_Meta_EffectMeta;
            }>((acc, [key, value]) => {
              acc[key] =
                CheckResourcesResponse_ResultEntry_Meta_EffectMeta.fromJSON(
                  value,
                );
              return acc;
            }, {})
          : {},
        effectiveDerivedRoles: globalThis.Array.isArray(
          object?.effectiveDerivedRoles,
        )
          ? object.effectiveDerivedRoles.map((e: any) => globalThis.String(e))
          : [],
      };
    },

    toJSON(message: CheckResourcesResponse_ResultEntry_Meta): unknown {
      const obj: any = {};
      if (message.actions) {
        const entries = Object.entries(message.actions);
        if (entries.length > 0) {
          obj.actions = {};
          entries.forEach(([k, v]) => {
            obj.actions[k] =
              CheckResourcesResponse_ResultEntry_Meta_EffectMeta.toJSON(v);
          });
        }
      }
      if (message.effectiveDerivedRoles?.length) {
        obj.effectiveDerivedRoles = message.effectiveDerivedRoles;
      }
      return obj;
    },
  };

export const CheckResourcesResponse_ResultEntry_Meta_EffectMeta: MessageFns<CheckResourcesResponse_ResultEntry_Meta_EffectMeta> =
  {
    fromJSON(object: any): CheckResourcesResponse_ResultEntry_Meta_EffectMeta {
      return {
        matchedPolicy: isSet(object.matchedPolicy)
          ? globalThis.String(object.matchedPolicy)
          : "",
        matchedScope: isSet(object.matchedScope)
          ? globalThis.String(object.matchedScope)
          : "",
      };
    },

    toJSON(
      message: CheckResourcesResponse_ResultEntry_Meta_EffectMeta,
    ): unknown {
      const obj: any = {};
      if (message.matchedPolicy !== "") {
        obj.matchedPolicy = message.matchedPolicy;
      }
      if (message.matchedScope !== "") {
        obj.matchedScope = message.matchedScope;
      }
      return obj;
    },
  };

export const CheckResourcesResponse_ResultEntry_Meta_ActionsEntry: MessageFns<CheckResourcesResponse_ResultEntry_Meta_ActionsEntry> =
  {
    fromJSON(
      object: any,
    ): CheckResourcesResponse_ResultEntry_Meta_ActionsEntry {
      return {
        key: isSet(object.key) ? globalThis.String(object.key) : "",
        value: isSet(object.value)
          ? CheckResourcesResponse_ResultEntry_Meta_EffectMeta.fromJSON(
              object.value,
            )
          : undefined,
      };
    },

    toJSON(
      message: CheckResourcesResponse_ResultEntry_Meta_ActionsEntry,
    ): unknown {
      const obj: any = {};
      if (message.key !== "") {
        obj.key = message.key;
      }
      if (message.value !== undefined) {
        obj.value = CheckResourcesResponse_ResultEntry_Meta_EffectMeta.toJSON(
          message.value,
        );
      }
      return obj;
    },
  };

export const CheckResourcesResponse_ResultEntry_ActionsEntry: MessageFns<CheckResourcesResponse_ResultEntry_ActionsEntry> =
  {
    fromJSON(object: any): CheckResourcesResponse_ResultEntry_ActionsEntry {
      return {
        key: isSet(object.key) ? globalThis.String(object.key) : "",
        value: isSet(object.value) ? effectFromJSON(object.value) : 0,
      };
    },

    toJSON(message: CheckResourcesResponse_ResultEntry_ActionsEntry): unknown {
      const obj: any = {};
      if (message.key !== "") {
        obj.key = message.key;
      }
      if (message.value !== 0) {
        obj.value = effectToJSON(message.value);
      }
      return obj;
    },
  };

export const AddOrUpdatePolicyResponse: MessageFns<AddOrUpdatePolicyResponse> =
  {
    fromJSON(object: any): AddOrUpdatePolicyResponse {
      return {
        success: isSet(object.success)
          ? Empty.fromJSON(object.success)
          : undefined,
      };
    },

    toJSON(message: AddOrUpdatePolicyResponse): unknown {
      const obj: any = {};
      if (message.success !== undefined) {
        obj.success = Empty.toJSON(message.success);
      }
      return obj;
    },
  };

export const ListAuditLogEntriesResponse: MessageFns<ListAuditLogEntriesResponse> =
  {
    fromJSON(object: any): ListAuditLogEntriesResponse {
      return {
        entry: isSet(object.accessLogEntry)
          ? {
              $case: "accessLogEntry",
              accessLogEntry: AccessLogEntry.fromJSON(object.accessLogEntry),
            }
          : isSet(object.decisionLogEntry)
            ? {
                $case: "decisionLogEntry",
                decisionLogEntry: DecisionLogEntry.fromJSON(
                  object.decisionLogEntry,
                ),
              }
            : undefined,
      };
    },

    toJSON(message: ListAuditLogEntriesResponse): unknown {
      const obj: any = {};
      if (message.entry?.$case === "accessLogEntry") {
        obj.accessLogEntry = AccessLogEntry.toJSON(
          message.entry.accessLogEntry,
        );
      } else if (message.entry?.$case === "decisionLogEntry") {
        obj.decisionLogEntry = DecisionLogEntry.toJSON(
          message.entry.decisionLogEntry,
        );
      }
      return obj;
    },
  };

export const ServerInfoResponse: MessageFns<ServerInfoResponse> = {
  fromJSON(object: any): ServerInfoResponse {
    return {
      version: isSet(object.version) ? globalThis.String(object.version) : "",
      commit: isSet(object.commit) ? globalThis.String(object.commit) : "",
      buildDate: isSet(object.buildDate)
        ? globalThis.String(object.buildDate)
        : "",
    };
  },

  toJSON(message: ServerInfoResponse): unknown {
    const obj: any = {};
    if (message.version !== "") {
      obj.version = message.version;
    }
    if (message.commit !== "") {
      obj.commit = message.commit;
    }
    if (message.buildDate !== "") {
      obj.buildDate = message.buildDate;
    }
    return obj;
  },
};

export const ListPoliciesResponse: MessageFns<ListPoliciesResponse> = {
  fromJSON(object: any): ListPoliciesResponse {
    return {
      policyIds: globalThis.Array.isArray(object?.policyIds)
        ? object.policyIds.map((e: any) => globalThis.String(e))
        : [],
    };
  },

  toJSON(message: ListPoliciesResponse): unknown {
    const obj: any = {};
    if (message.policyIds?.length) {
      obj.policyIds = message.policyIds;
    }
    return obj;
  },
};

export const GetPolicyResponse: MessageFns<GetPolicyResponse> = {
  fromJSON(object: any): GetPolicyResponse {
    return {
      policies: globalThis.Array.isArray(object?.policies)
        ? object.policies.map((e: any) => Policy.fromJSON(e))
        : [],
    };
  },

  toJSON(message: GetPolicyResponse): unknown {
    const obj: any = {};
    if (message.policies?.length) {
      obj.policies = message.policies.map((e) => Policy.toJSON(e));
    }
    return obj;
  },
};

export const DisablePolicyResponse: MessageFns<DisablePolicyResponse> = {
  fromJSON(object: any): DisablePolicyResponse {
    return {
      disabledPolicies: isSet(object.disabledPolicies)
        ? globalThis.Number(object.disabledPolicies)
        : 0,
    };
  },

  toJSON(message: DisablePolicyResponse): unknown {
    const obj: any = {};
    if (message.disabledPolicies !== 0) {
      obj.disabledPolicies = Math.round(message.disabledPolicies);
    }
    return obj;
  },
};

export const EnablePolicyResponse: MessageFns<EnablePolicyResponse> = {
  fromJSON(object: any): EnablePolicyResponse {
    return {
      enabledPolicies: isSet(object.enabledPolicies)
        ? globalThis.Number(object.enabledPolicies)
        : 0,
    };
  },

  toJSON(message: EnablePolicyResponse): unknown {
    const obj: any = {};
    if (message.enabledPolicies !== 0) {
      obj.enabledPolicies = Math.round(message.enabledPolicies);
    }
    return obj;
  },
};

export const InspectPoliciesResponse: MessageFns<InspectPoliciesResponse> = {
  fromJSON(object: any): InspectPoliciesResponse {
    return {
      results: isObject(object.results)
        ? Object.entries(object.results).reduce<{
            [key: string]: InspectPoliciesResponse_Result;
          }>((acc, [key, value]) => {
            acc[key] = InspectPoliciesResponse_Result.fromJSON(value);
            return acc;
          }, {})
        : {},
    };
  },

  toJSON(message: InspectPoliciesResponse): unknown {
    const obj: any = {};
    if (message.results) {
      const entries = Object.entries(message.results);
      if (entries.length > 0) {
        obj.results = {};
        entries.forEach(([k, v]) => {
          obj.results[k] = InspectPoliciesResponse_Result.toJSON(v);
        });
      }
    }
    return obj;
  },
};

export const InspectPoliciesResponse_Attribute: MessageFns<InspectPoliciesResponse_Attribute> =
  {
    fromJSON(object: any): InspectPoliciesResponse_Attribute {
      return {
        kind: isSet(object.kind)
          ? inspectPoliciesResponse_Attribute_KindFromJSON(object.kind)
          : 0,
        name: isSet(object.name) ? globalThis.String(object.name) : "",
      };
    },

    toJSON(message: InspectPoliciesResponse_Attribute): unknown {
      const obj: any = {};
      if (message.kind !== 0) {
        obj.kind = inspectPoliciesResponse_Attribute_KindToJSON(message.kind);
      }
      if (message.name !== "") {
        obj.name = message.name;
      }
      return obj;
    },
  };

export const InspectPoliciesResponse_DerivedRole: MessageFns<InspectPoliciesResponse_DerivedRole> =
  {
    fromJSON(object: any): InspectPoliciesResponse_DerivedRole {
      return {
        name: isSet(object.name) ? globalThis.String(object.name) : "",
        kind: isSet(object.kind)
          ? inspectPoliciesResponse_DerivedRole_KindFromJSON(object.kind)
          : 0,
        source: isSet(object.source) ? globalThis.String(object.source) : "",
      };
    },

    toJSON(message: InspectPoliciesResponse_DerivedRole): unknown {
      const obj: any = {};
      if (message.name !== "") {
        obj.name = message.name;
      }
      if (message.kind !== 0) {
        obj.kind = inspectPoliciesResponse_DerivedRole_KindToJSON(message.kind);
      }
      if (message.source !== "") {
        obj.source = message.source;
      }
      return obj;
    },
  };

export const InspectPoliciesResponse_Constant: MessageFns<InspectPoliciesResponse_Constant> =
  {
    fromJSON(object: any): InspectPoliciesResponse_Constant {
      return {
        name: isSet(object.name) ? globalThis.String(object.name) : "",
        value: isSet(object?.value) ? object.value : undefined,
        kind: isSet(object.kind)
          ? inspectPoliciesResponse_Constant_KindFromJSON(object.kind)
          : 0,
        source: isSet(object.source) ? globalThis.String(object.source) : "",
        used: isSet(object.used) ? globalThis.Boolean(object.used) : false,
      };
    },

    toJSON(message: InspectPoliciesResponse_Constant): unknown {
      const obj: any = {};
      if (message.name !== "") {
        obj.name = message.name;
      }
      if (message.value !== undefined) {
        obj.value = message.value;
      }
      if (message.kind !== 0) {
        obj.kind = inspectPoliciesResponse_Constant_KindToJSON(message.kind);
      }
      if (message.source !== "") {
        obj.source = message.source;
      }
      if (message.used !== false) {
        obj.used = message.used;
      }
      return obj;
    },
  };

export const InspectPoliciesResponse_Variable: MessageFns<InspectPoliciesResponse_Variable> =
  {
    fromJSON(object: any): InspectPoliciesResponse_Variable {
      return {
        name: isSet(object.name) ? globalThis.String(object.name) : "",
        value: isSet(object.value) ? globalThis.String(object.value) : "",
        kind: isSet(object.kind)
          ? inspectPoliciesResponse_Variable_KindFromJSON(object.kind)
          : 0,
        source: isSet(object.source) ? globalThis.String(object.source) : "",
        used: isSet(object.used) ? globalThis.Boolean(object.used) : false,
      };
    },

    toJSON(message: InspectPoliciesResponse_Variable): unknown {
      const obj: any = {};
      if (message.name !== "") {
        obj.name = message.name;
      }
      if (message.value !== "") {
        obj.value = message.value;
      }
      if (message.kind !== 0) {
        obj.kind = inspectPoliciesResponse_Variable_KindToJSON(message.kind);
      }
      if (message.source !== "") {
        obj.source = message.source;
      }
      if (message.used !== false) {
        obj.used = message.used;
      }
      return obj;
    },
  };

export const InspectPoliciesResponse_Result: MessageFns<InspectPoliciesResponse_Result> =
  {
    fromJSON(object: any): InspectPoliciesResponse_Result {
      return {
        actions: globalThis.Array.isArray(object?.actions)
          ? object.actions.map((e: any) => globalThis.String(e))
          : [],
        variables: globalThis.Array.isArray(object?.variables)
          ? object.variables.map((e: any) =>
              InspectPoliciesResponse_Variable.fromJSON(e),
            )
          : [],
        policyId: isSet(object.policyId)
          ? globalThis.String(object.policyId)
          : "",
        derivedRoles: globalThis.Array.isArray(object?.derivedRoles)
          ? object.derivedRoles.map((e: any) =>
              InspectPoliciesResponse_DerivedRole.fromJSON(e),
            )
          : [],
        attributes: globalThis.Array.isArray(object?.attributes)
          ? object.attributes.map((e: any) =>
              InspectPoliciesResponse_Attribute.fromJSON(e),
            )
          : [],
        constants: globalThis.Array.isArray(object?.constants)
          ? object.constants.map((e: any) =>
              InspectPoliciesResponse_Constant.fromJSON(e),
            )
          : [],
      };
    },

    toJSON(message: InspectPoliciesResponse_Result): unknown {
      const obj: any = {};
      if (message.actions?.length) {
        obj.actions = message.actions;
      }
      if (message.variables?.length) {
        obj.variables = message.variables.map((e) =>
          InspectPoliciesResponse_Variable.toJSON(e),
        );
      }
      if (message.policyId !== "") {
        obj.policyId = message.policyId;
      }
      if (message.derivedRoles?.length) {
        obj.derivedRoles = message.derivedRoles.map((e) =>
          InspectPoliciesResponse_DerivedRole.toJSON(e),
        );
      }
      if (message.attributes?.length) {
        obj.attributes = message.attributes.map((e) =>
          InspectPoliciesResponse_Attribute.toJSON(e),
        );
      }
      if (message.constants?.length) {
        obj.constants = message.constants.map((e) =>
          InspectPoliciesResponse_Constant.toJSON(e),
        );
      }
      return obj;
    },
  };

export const InspectPoliciesResponse_ResultsEntry: MessageFns<InspectPoliciesResponse_ResultsEntry> =
  {
    fromJSON(object: any): InspectPoliciesResponse_ResultsEntry {
      return {
        key: isSet(object.key) ? globalThis.String(object.key) : "",
        value: isSet(object.value)
          ? InspectPoliciesResponse_Result.fromJSON(object.value)
          : undefined,
      };
    },

    toJSON(message: InspectPoliciesResponse_ResultsEntry): unknown {
      const obj: any = {};
      if (message.key !== "") {
        obj.key = message.key;
      }
      if (message.value !== undefined) {
        obj.value = InspectPoliciesResponse_Result.toJSON(message.value);
      }
      return obj;
    },
  };

export const AddOrUpdateSchemaResponse: MessageFns<AddOrUpdateSchemaResponse> =
  {
    fromJSON(_: any): AddOrUpdateSchemaResponse {
      return {};
    },

    toJSON(_: AddOrUpdateSchemaResponse): unknown {
      const obj: any = {};
      return obj;
    },
  };

export const ListSchemasResponse: MessageFns<ListSchemasResponse> = {
  fromJSON(object: any): ListSchemasResponse {
    return {
      schemaIds: globalThis.Array.isArray(object?.schemaIds)
        ? object.schemaIds.map((e: any) => globalThis.String(e))
        : [],
    };
  },

  toJSON(message: ListSchemasResponse): unknown {
    const obj: any = {};
    if (message.schemaIds?.length) {
      obj.schemaIds = message.schemaIds;
    }
    return obj;
  },
};

export const GetSchemaResponse: MessageFns<GetSchemaResponse> = {
  fromJSON(object: any): GetSchemaResponse {
    return {
      schemas: globalThis.Array.isArray(object?.schemas)
        ? object.schemas.map((e: any) => Schema.fromJSON(e))
        : [],
    };
  },

  toJSON(message: GetSchemaResponse): unknown {
    const obj: any = {};
    if (message.schemas?.length) {
      obj.schemas = message.schemas.map((e) => Schema.toJSON(e));
    }
    return obj;
  },
};

export const DeleteSchemaResponse: MessageFns<DeleteSchemaResponse> = {
  fromJSON(object: any): DeleteSchemaResponse {
    return {
      deletedSchemas: isSet(object.deletedSchemas)
        ? globalThis.Number(object.deletedSchemas)
        : 0,
    };
  },

  toJSON(message: DeleteSchemaResponse): unknown {
    const obj: any = {};
    if (message.deletedSchemas !== 0) {
      obj.deletedSchemas = Math.round(message.deletedSchemas);
    }
    return obj;
  },
};

export const ReloadStoreResponse: MessageFns<ReloadStoreResponse> = {
  fromJSON(_: any): ReloadStoreResponse {
    return {};
  },

  toJSON(_: ReloadStoreResponse): unknown {
    const obj: any = {};
    return obj;
  },
};

function isObject(value: any): boolean {
  return typeof value === "object" && value !== null;
}

function isSet(value: any): boolean {
  return value !== null && value !== undefined;
}

export interface MessageFns<T> {
  fromJSON(object: any): T;
  toJSON(message: T): unknown;
}
