import * as AggregatorResolutionMode from './AggregatorResolutionMode';
import * as Error from './Error';
import * as Lanes from './Lanes';
import * as OracleResponseType from './OracleResponseType';
import * as Shuffle from './Shuffle';
import * as SwitchboardPermission from './SwitchboardPermission';
import * as VrfStatus from './VrfStatus';

export { AccountMetaBorsh } from './AccountMetaBorsh';
export type {
  AccountMetaBorshFields,
  AccountMetaBorshJSON,
} from './AccountMetaBorsh';
export { AccountMetaZC } from './AccountMetaZC';
export type { AccountMetaZCFields, AccountMetaZCJSON } from './AccountMetaZC';
export { AggregatorAddJobParams } from './AggregatorAddJobParams';
export type {
  AggregatorAddJobParamsFields,
  AggregatorAddJobParamsJSON,
} from './AggregatorAddJobParams';
export { AggregatorHistoryRow } from './AggregatorHistoryRow';
export type {
  AggregatorHistoryRowFields,
  AggregatorHistoryRowJSON,
} from './AggregatorHistoryRow';
export { AggregatorInitParams } from './AggregatorInitParams';
export type {
  AggregatorInitParamsFields,
  AggregatorInitParamsJSON,
} from './AggregatorInitParams';
export { AggregatorLockParams } from './AggregatorLockParams';
export type {
  AggregatorLockParamsFields,
  AggregatorLockParamsJSON,
} from './AggregatorLockParams';
export { AggregatorOpenRoundParams } from './AggregatorOpenRoundParams';
export type {
  AggregatorOpenRoundParamsFields,
  AggregatorOpenRoundParamsJSON,
} from './AggregatorOpenRoundParams';
export { AggregatorRemoveJobParams } from './AggregatorRemoveJobParams';
export type {
  AggregatorRemoveJobParamsFields,
  AggregatorRemoveJobParamsJSON,
} from './AggregatorRemoveJobParams';
export { AggregatorRound } from './AggregatorRound';
export type {
  AggregatorRoundFields,
  AggregatorRoundJSON,
} from './AggregatorRound';
export { AggregatorSaveResultParams } from './AggregatorSaveResultParams';
export type {
  AggregatorSaveResultParamsFields,
  AggregatorSaveResultParamsJSON,
} from './AggregatorSaveResultParams';
export { AggregatorSaveResultParamsV2 } from './AggregatorSaveResultParamsV2';
export type {
  AggregatorSaveResultParamsV2Fields,
  AggregatorSaveResultParamsV2JSON,
} from './AggregatorSaveResultParamsV2';
export { AggregatorSetAuthorityParams } from './AggregatorSetAuthorityParams';
export type {
  AggregatorSetAuthorityParamsFields,
  AggregatorSetAuthorityParamsJSON,
} from './AggregatorSetAuthorityParams';
export { AggregatorSetBatchSizeParams } from './AggregatorSetBatchSizeParams';
export type {
  AggregatorSetBatchSizeParamsFields,
  AggregatorSetBatchSizeParamsJSON,
} from './AggregatorSetBatchSizeParams';
export { AggregatorSetConfigParams } from './AggregatorSetConfigParams';
export type {
  AggregatorSetConfigParamsFields,
  AggregatorSetConfigParamsJSON,
} from './AggregatorSetConfigParams';
export { AggregatorSetForceReportPeriodParams } from './AggregatorSetForceReportPeriodParams';
export type {
  AggregatorSetForceReportPeriodParamsFields,
  AggregatorSetForceReportPeriodParamsJSON,
} from './AggregatorSetForceReportPeriodParams';
export { AggregatorSetHistoryBufferParams } from './AggregatorSetHistoryBufferParams';
export type {
  AggregatorSetHistoryBufferParamsFields,
  AggregatorSetHistoryBufferParamsJSON,
} from './AggregatorSetHistoryBufferParams';
export { AggregatorSetMinJobsParams } from './AggregatorSetMinJobsParams';
export type {
  AggregatorSetMinJobsParamsFields,
  AggregatorSetMinJobsParamsJSON,
} from './AggregatorSetMinJobsParams';
export { AggregatorSetMinOraclesParams } from './AggregatorSetMinOraclesParams';
export type {
  AggregatorSetMinOraclesParamsFields,
  AggregatorSetMinOraclesParamsJSON,
} from './AggregatorSetMinOraclesParams';
export { AggregatorSetQueueParams } from './AggregatorSetQueueParams';
export type {
  AggregatorSetQueueParamsFields,
  AggregatorSetQueueParamsJSON,
} from './AggregatorSetQueueParams';
export { AggregatorSetResolutionModeParams } from './AggregatorSetResolutionModeParams';
export type {
  AggregatorSetResolutionModeParamsFields,
  AggregatorSetResolutionModeParamsJSON,
} from './AggregatorSetResolutionModeParams';
export { AggregatorSetUpdateIntervalParams } from './AggregatorSetUpdateIntervalParams';
export type {
  AggregatorSetUpdateIntervalParamsFields,
  AggregatorSetUpdateIntervalParamsJSON,
} from './AggregatorSetUpdateIntervalParams';
export { AggregatorSetVarianceThresholdParams } from './AggregatorSetVarianceThresholdParams';
export type {
  AggregatorSetVarianceThresholdParamsFields,
  AggregatorSetVarianceThresholdParamsJSON,
} from './AggregatorSetVarianceThresholdParams';
export { BorshDecimal } from './BorshDecimal';
export type { BorshDecimalFields, BorshDecimalJSON } from './BorshDecimal';
export { BufferRelayerInitParams } from './BufferRelayerInitParams';
export type {
  BufferRelayerInitParamsFields,
  BufferRelayerInitParamsJSON,
} from './BufferRelayerInitParams';
export { BufferRelayerOpenRoundParams } from './BufferRelayerOpenRoundParams';
export type {
  BufferRelayerOpenRoundParamsFields,
  BufferRelayerOpenRoundParamsJSON,
} from './BufferRelayerOpenRoundParams';
export { BufferRelayerRound } from './BufferRelayerRound';
export type {
  BufferRelayerRoundFields,
  BufferRelayerRoundJSON,
} from './BufferRelayerRound';
export { BufferRelayerSaveResultParams } from './BufferRelayerSaveResultParams';
export type {
  BufferRelayerSaveResultParamsFields,
  BufferRelayerSaveResultParamsJSON,
} from './BufferRelayerSaveResultParams';
export { Callback } from './Callback';
export type { CallbackFields, CallbackJSON } from './Callback';
export { CallbackZC } from './CallbackZC';
export type { CallbackZCFields, CallbackZCJSON } from './CallbackZC';
export { CompletedPointZC } from './CompletedPointZC';
export type {
  CompletedPointZCFields,
  CompletedPointZCJSON,
} from './CompletedPointZC';
export { CrankInitParams } from './CrankInitParams';
export type {
  CrankInitParamsFields,
  CrankInitParamsJSON,
} from './CrankInitParams';
export { CrankPopParams } from './CrankPopParams';
export type {
  CrankPopParamsFields,
  CrankPopParamsJSON,
} from './CrankPopParams';
export { CrankPopParamsV2 } from './CrankPopParamsV2';
export type {
  CrankPopParamsV2Fields,
  CrankPopParamsV2JSON,
} from './CrankPopParamsV2';
export { CrankPushParams } from './CrankPushParams';
export type {
  CrankPushParamsFields,
  CrankPushParamsJSON,
} from './CrankPushParams';
export { CrankRow } from './CrankRow';
export type { CrankRowFields, CrankRowJSON } from './CrankRow';
export { EcvrfIntermediate } from './EcvrfIntermediate';
export type {
  EcvrfIntermediateFields,
  EcvrfIntermediateJSON,
} from './EcvrfIntermediate';
export { EcvrfProofZC } from './EcvrfProofZC';
export type { EcvrfProofZCFields, EcvrfProofZCJSON } from './EcvrfProofZC';
export { EdwardsPointZC } from './EdwardsPointZC';
export type {
  EdwardsPointZCFields,
  EdwardsPointZCJSON,
} from './EdwardsPointZC';
export { FieldElementZC } from './FieldElementZC';
export type {
  FieldElementZCFields,
  FieldElementZCJSON,
} from './FieldElementZC';
export { Hash } from './Hash';
export type { HashFields, HashJSON } from './Hash';
export { JobInitParams } from './JobInitParams';
export type { JobInitParamsFields, JobInitParamsJSON } from './JobInitParams';
export { JobSetDataParams } from './JobSetDataParams';
export type {
  JobSetDataParamsFields,
  JobSetDataParamsJSON,
} from './JobSetDataParams';
export { LeaseExtendParams } from './LeaseExtendParams';
export type {
  LeaseExtendParamsFields,
  LeaseExtendParamsJSON,
} from './LeaseExtendParams';
export { LeaseInitParams } from './LeaseInitParams';
export type {
  LeaseInitParamsFields,
  LeaseInitParamsJSON,
} from './LeaseInitParams';
export { LeaseSetAuthorityParams } from './LeaseSetAuthorityParams';
export type {
  LeaseSetAuthorityParamsFields,
  LeaseSetAuthorityParamsJSON,
} from './LeaseSetAuthorityParams';
export { LeaseWithdrawParams } from './LeaseWithdrawParams';
export type {
  LeaseWithdrawParamsFields,
  LeaseWithdrawParamsJSON,
} from './LeaseWithdrawParams';
export { OracleHeartbeatParams } from './OracleHeartbeatParams';
export type {
  OracleHeartbeatParamsFields,
  OracleHeartbeatParamsJSON,
} from './OracleHeartbeatParams';
export { OracleInitParams } from './OracleInitParams';
export type {
  OracleInitParamsFields,
  OracleInitParamsJSON,
} from './OracleInitParams';
export { OracleMetrics } from './OracleMetrics';
export type { OracleMetricsFields, OracleMetricsJSON } from './OracleMetrics';
export { OracleQueueInitParams } from './OracleQueueInitParams';
export type {
  OracleQueueInitParamsFields,
  OracleQueueInitParamsJSON,
} from './OracleQueueInitParams';
export { OracleQueueSetConfigParams } from './OracleQueueSetConfigParams';
export type {
  OracleQueueSetConfigParamsFields,
  OracleQueueSetConfigParamsJSON,
} from './OracleQueueSetConfigParams';
export { OracleQueueSetRewardsParams } from './OracleQueueSetRewardsParams';
export type {
  OracleQueueSetRewardsParamsFields,
  OracleQueueSetRewardsParamsJSON,
} from './OracleQueueSetRewardsParams';
export { OracleWithdrawParams } from './OracleWithdrawParams';
export type {
  OracleWithdrawParamsFields,
  OracleWithdrawParamsJSON,
} from './OracleWithdrawParams';
export { PermissionInitParams } from './PermissionInitParams';
export type {
  PermissionInitParamsFields,
  PermissionInitParamsJSON,
} from './PermissionInitParams';
export { PermissionSetParams } from './PermissionSetParams';
export type {
  PermissionSetParamsFields,
  PermissionSetParamsJSON,
} from './PermissionSetParams';
export { ProgramConfigParams } from './ProgramConfigParams';
export type {
  ProgramConfigParamsFields,
  ProgramConfigParamsJSON,
} from './ProgramConfigParams';
export { ProgramInitParams } from './ProgramInitParams';
export type {
  ProgramInitParamsFields,
  ProgramInitParamsJSON,
} from './ProgramInitParams';
export { ProjectivePointZC } from './ProjectivePointZC';
export type {
  ProjectivePointZCFields,
  ProjectivePointZCJSON,
} from './ProjectivePointZC';
export { Scalar } from './Scalar';
export type { ScalarFields, ScalarJSON } from './Scalar';
export { SlidingWindowElement } from './SlidingWindowElement';
export type {
  SlidingWindowElementFields,
  SlidingWindowElementJSON,
} from './SlidingWindowElement';
export { SwitchboardDecimal } from './SwitchboardDecimal';
export type {
  SwitchboardDecimalFields,
  SwitchboardDecimalJSON,
} from './SwitchboardDecimal';
export {
  PermitNone,
  PermitOracleHeartbeat,
  PermitOracleQueueUsage,
  PermitVrfRequests,
} from './SwitchboardPermission';
export { VaultTransferParams } from './VaultTransferParams';
export type {
  VaultTransferParamsFields,
  VaultTransferParamsJSON,
} from './VaultTransferParams';
export { VrfBuilder } from './VrfBuilder';
export type { VrfBuilderFields, VrfBuilderJSON } from './VrfBuilder';
export { VrfCloseParams } from './VrfCloseParams';
export type {
  VrfCloseParamsFields,
  VrfCloseParamsJSON,
} from './VrfCloseParams';
export { VrfInitParams } from './VrfInitParams';
export type { VrfInitParamsFields, VrfInitParamsJSON } from './VrfInitParams';
export { VrfLiteCloseParams } from './VrfLiteCloseParams';
export type {
  VrfLiteCloseParamsFields,
  VrfLiteCloseParamsJSON,
} from './VrfLiteCloseParams';
export { VrfLiteInitParams } from './VrfLiteInitParams';
export type {
  VrfLiteInitParamsFields,
  VrfLiteInitParamsJSON,
} from './VrfLiteInitParams';
export { VrfLiteProveAndVerifyParams } from './VrfLiteProveAndVerifyParams';
export type {
  VrfLiteProveAndVerifyParamsFields,
  VrfLiteProveAndVerifyParamsJSON,
} from './VrfLiteProveAndVerifyParams';
export { VrfLiteRequestRandomnessParams } from './VrfLiteRequestRandomnessParams';
export type {
  VrfLiteRequestRandomnessParamsFields,
  VrfLiteRequestRandomnessParamsJSON,
} from './VrfLiteRequestRandomnessParams';
export { VrfPoolAddParams } from './VrfPoolAddParams';
export type {
  VrfPoolAddParamsFields,
  VrfPoolAddParamsJSON,
} from './VrfPoolAddParams';
export { VrfPoolInitParams } from './VrfPoolInitParams';
export type {
  VrfPoolInitParamsFields,
  VrfPoolInitParamsJSON,
} from './VrfPoolInitParams';
export { VrfPoolRemoveParams } from './VrfPoolRemoveParams';
export type {
  VrfPoolRemoveParamsFields,
  VrfPoolRemoveParamsJSON,
} from './VrfPoolRemoveParams';
export { VrfPoolRequestParams } from './VrfPoolRequestParams';
export type {
  VrfPoolRequestParamsFields,
  VrfPoolRequestParamsJSON,
} from './VrfPoolRequestParams';
export { VrfPoolRow } from './VrfPoolRow';
export type { VrfPoolRowFields, VrfPoolRowJSON } from './VrfPoolRow';
export { VrfProveAndVerifyParams } from './VrfProveAndVerifyParams';
export type {
  VrfProveAndVerifyParamsFields,
  VrfProveAndVerifyParamsJSON,
} from './VrfProveAndVerifyParams';
export { VrfProveParams } from './VrfProveParams';
export type {
  VrfProveParamsFields,
  VrfProveParamsJSON,
} from './VrfProveParams';
export { VrfRequestRandomnessParams } from './VrfRequestRandomnessParams';
export type {
  VrfRequestRandomnessParamsFields,
  VrfRequestRandomnessParamsJSON,
} from './VrfRequestRandomnessParams';
export { VrfRound } from './VrfRound';
export type { VrfRoundFields, VrfRoundJSON } from './VrfRound';
export { VrfSetCallbackParams } from './VrfSetCallbackParams';
export type {
  VrfSetCallbackParamsFields,
  VrfSetCallbackParamsJSON,
} from './VrfSetCallbackParams';
export { Lanes };
export { Shuffle };
export { Error };
export { AggregatorResolutionMode };
export { SwitchboardPermission };
export { OracleResponseType };
export { VrfStatus };

/**
 * The `Lanes` enum represents a subset of the lanes `A,B,C,D` of a
 * `FieldElement2625x4`.
 *
 * It's used to specify blend operations without
 * having to know details about the data layout of the
 * `FieldElement2625x4`.
 */
export type LanesKind = Lanes.C | Lanes.D | Lanes.AB | Lanes.AC | Lanes.AD;
export type LanesJSON =
  | Lanes.CJSON
  | Lanes.DJSON
  | Lanes.ABJSON
  | Lanes.ACJSON
  | Lanes.ADJSON;

/**
 * The `Shuffle` enum represents a shuffle of a `FieldElement2625x4`.
 *
 * The enum variants are named by what they do to a vector \\(
 * (A,B,C,D) \\); for instance, `Shuffle::BADC` turns \\( (A, B, C,
 * D) \\) into \\( (B, A, D, C) \\).
 */
export type ShuffleKind =
  | Shuffle.AAAA
  | Shuffle.BBBB
  | Shuffle.CACA
  | Shuffle.DBBD
  | Shuffle.ADDA
  | Shuffle.CBCB
  | Shuffle.ABAB
  | Shuffle.BADC
  | Shuffle.BACD
  | Shuffle.ABDC;
export type ShuffleJSON =
  | Shuffle.AAAAJSON
  | Shuffle.BBBBJSON
  | Shuffle.CACAJSON
  | Shuffle.DBBDJSON
  | Shuffle.ADDAJSON
  | Shuffle.CBCBJSON
  | Shuffle.ABABJSON
  | Shuffle.BADCJSON
  | Shuffle.BACDJSON
  | Shuffle.ABDCJSON;

export type ErrorKind =
  | Error.InvalidPublicKey
  | Error.SerializationError
  | Error.DeserializationError
  | Error.InvalidDataError;
export type ErrorJSON =
  | Error.InvalidPublicKeyJSON
  | Error.SerializationErrorJSON
  | Error.DeserializationErrorJSON
  | Error.InvalidDataErrorJSON;

export type AggregatorResolutionModeKind =
  | AggregatorResolutionMode.ModeRoundResolution
  | AggregatorResolutionMode.ModeSlidingResolution;
export type AggregatorResolutionModeJSON =
  | AggregatorResolutionMode.ModeRoundResolutionJSON
  | AggregatorResolutionMode.ModeSlidingResolutionJSON;

export type SwitchboardPermissionKind =
  | SwitchboardPermission.PermitNone
  | SwitchboardPermission.PermitOracleHeartbeat
  | SwitchboardPermission.PermitOracleQueueUsage
  | SwitchboardPermission.PermitVrfRequests;
export type SwitchboardPermissionJSON =
  | SwitchboardPermission.PermitNoneJSON
  | SwitchboardPermission.PermitOracleHeartbeatJSON
  | SwitchboardPermission.PermitOracleQueueUsageJSON
  | SwitchboardPermission.PermitVrfRequestsJSON;

export type OracleResponseTypeKind =
  | OracleResponseType.TypeSuccess
  | OracleResponseType.TypeError
  | OracleResponseType.TypeDisagreement
  | OracleResponseType.TypeNoResponse;
export type OracleResponseTypeJSON =
  | OracleResponseType.TypeSuccessJSON
  | OracleResponseType.TypeErrorJSON
  | OracleResponseType.TypeDisagreementJSON
  | OracleResponseType.TypeNoResponseJSON;

export type VrfStatusKind =
  | VrfStatus.StatusNone
  | VrfStatus.StatusRequesting
  | VrfStatus.StatusVerifying
  | VrfStatus.StatusVerified
  | VrfStatus.StatusCallbackSuccess
  | VrfStatus.StatusVerifyFailure;
export type VrfStatusJSON =
  | VrfStatus.StatusNoneJSON
  | VrfStatus.StatusRequestingJSON
  | VrfStatus.StatusVerifyingJSON
  | VrfStatus.StatusVerifiedJSON
  | VrfStatus.StatusCallbackSuccessJSON
  | VrfStatus.StatusVerifyFailureJSON;
