import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import type { SignalFormat, SignalFormatJson } from "./signal_format_pb";
import type { Transmitter_Mode, Transmitter_ModeJson } from "./transmitter_pb";
import type { Message } from "@bufbuild/protobuf";
/**
 * Describes the file mochabugapis/adapt/graph/v1/user_defined_exchange_options.proto.
 */
export declare const file_mochabugapis_adapt_graph_v1_user_defined_exchange_options: GenFile;
/**
 * UserDefinedExchangeOptions configures if and how users can create their own
 * exchanges on a vertex at graph construction time.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions
 */
export type UserDefinedExchangeOptions = Message<"mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions"> & {
    /**
     * Restrictions on the output side of user-defined exchanges.
     * Unset = no restrictions beyond Exchange's own validation.
     *
     * @generated from field: optional mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterOptions transmitter_options = 1;
     */
    transmitterOptions?: UserDefinedExchangeOptions_TransmitterOptions | undefined;
    /**
     * Restrictions on the input side of user-defined exchanges.
     * Unset = no restrictions beyond Exchange's own validation.
     *
     * @generated from field: optional mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverOptions receiver_options = 2;
     */
    receiverOptions?: UserDefinedExchangeOptions_ReceiverOptions | undefined;
    /**
     * Maximum number of user-defined exchanges allowed. Unset = no limit.
     *
     * @generated from field: optional int32 max_exchanges = 3;
     */
    maxExchanges?: number | undefined;
    /**
     * Minimum number of user-defined exchanges required. Unset = no minimum.
     *
     * @generated from field: optional int32 min_exchanges = 4;
     */
    minExchanges?: number | undefined;
    /**
     * Locks on specific plugin-defined exchanges.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ExchangeLock exchange_locks = 5;
     */
    exchangeLocks: UserDefinedExchangeOptions_ExchangeLock[];
};
/**
 * UserDefinedExchangeOptions configures if and how users can create their own
 * exchanges on a vertex at graph construction time.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions
 */
export type UserDefinedExchangeOptionsJson = {
    /**
     * Restrictions on the output side of user-defined exchanges.
     * Unset = no restrictions beyond Exchange's own validation.
     *
     * @generated from field: optional mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterOptions transmitter_options = 1;
     */
    transmitterOptions?: UserDefinedExchangeOptions_TransmitterOptionsJson;
    /**
     * Restrictions on the input side of user-defined exchanges.
     * Unset = no restrictions beyond Exchange's own validation.
     *
     * @generated from field: optional mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverOptions receiver_options = 2;
     */
    receiverOptions?: UserDefinedExchangeOptions_ReceiverOptionsJson;
    /**
     * Maximum number of user-defined exchanges allowed. Unset = no limit.
     *
     * @generated from field: optional int32 max_exchanges = 3;
     */
    maxExchanges?: number;
    /**
     * Minimum number of user-defined exchanges required. Unset = no minimum.
     *
     * @generated from field: optional int32 min_exchanges = 4;
     */
    minExchanges?: number;
    /**
     * Locks on specific plugin-defined exchanges.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ExchangeLock exchange_locks = 5;
     */
    exchangeLocks?: UserDefinedExchangeOptions_ExchangeLockJson[];
};
/**
 * Describes the message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.
 * Use `create(UserDefinedExchangeOptionsSchema)` to create a new message.
 */
export declare const UserDefinedExchangeOptionsSchema: GenMessage<UserDefinedExchangeOptions, {
    jsonType: UserDefinedExchangeOptionsJson;
}>;
/**
 * SignalLock constrains a specific signal within a transmitter or receiver.
 * Presence means the signal is locked. Fields grant exceptions.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.SignalLock
 */
export type UserDefinedExchangeOptions_SignalLock = Message<"mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.SignalLock"> & {
    /**
     * Name of the signal to lock.
     *
     * @generated from field: string name = 1;
     */
    name: string;
    /**
     * If set, the user can modify this signal's format but their format must
     * subsume this base format. If unset, the signal is fully locked.
     *
     * @generated from field: optional mochabugapis.adapt.graph.v1.SignalFormat must_subsume = 2;
     */
    mustSubsume?: SignalFormat | undefined;
};
/**
 * SignalLock constrains a specific signal within a transmitter or receiver.
 * Presence means the signal is locked. Fields grant exceptions.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.SignalLock
 */
export type UserDefinedExchangeOptions_SignalLockJson = {
    /**
     * Name of the signal to lock.
     *
     * @generated from field: string name = 1;
     */
    name?: string;
    /**
     * If set, the user can modify this signal's format but their format must
     * subsume this base format. If unset, the signal is fully locked.
     *
     * @generated from field: optional mochabugapis.adapt.graph.v1.SignalFormat must_subsume = 2;
     */
    mustSubsume?: SignalFormatJson;
};
/**
 * Describes the message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.SignalLock.
 * Use `create(UserDefinedExchangeOptions_SignalLockSchema)` to create a new message.
 */
export declare const UserDefinedExchangeOptions_SignalLockSchema: GenMessage<UserDefinedExchangeOptions_SignalLock, {
    jsonType: UserDefinedExchangeOptions_SignalLockJson;
}>;
/**
 * TransmitterLock opens up a specific named output transmitter within a
 * locked exchange. Transmitters NOT listed in locks are fully frozen.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterLock
 */
export type UserDefinedExchangeOptions_TransmitterLock = Message<"mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterLock"> & {
    /**
     * Name of the transmitter to open up.
     *
     * @generated from field: string name = 1;
     */
    name: string;
    /**
     * Signals that remain locked within this transmitter.
     * Unlisted signals are free to modify.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.SignalLock signal_locks = 2;
     */
    signalLocks: UserDefinedExchangeOptions_SignalLock[];
    /**
     * Minimum total signals (including locked ones). Unset = no minimum.
     *
     * @generated from field: optional int32 min_signals = 3;
     */
    minSignals?: number | undefined;
    /**
     * Maximum total signals (including locked ones). Unset = no maximum.
     *
     * @generated from field: optional int32 max_signals = 4;
     */
    maxSignals?: number | undefined;
    /**
     * Pin the user-defined transmitter to this specific mode. If unset, the
     * user picks any mode they want (subject to the parent TransmitterOptions
     * gates).
     *
     * @generated from field: optional mochabugapis.adapt.graph.v1.Transmitter.Mode locked_mode = 5;
     */
    lockedMode?: Transmitter_Mode | undefined;
};
/**
 * TransmitterLock opens up a specific named output transmitter within a
 * locked exchange. Transmitters NOT listed in locks are fully frozen.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterLock
 */
export type UserDefinedExchangeOptions_TransmitterLockJson = {
    /**
     * Name of the transmitter to open up.
     *
     * @generated from field: string name = 1;
     */
    name?: string;
    /**
     * Signals that remain locked within this transmitter.
     * Unlisted signals are free to modify.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.SignalLock signal_locks = 2;
     */
    signalLocks?: UserDefinedExchangeOptions_SignalLockJson[];
    /**
     * Minimum total signals (including locked ones). Unset = no minimum.
     *
     * @generated from field: optional int32 min_signals = 3;
     */
    minSignals?: number;
    /**
     * Maximum total signals (including locked ones). Unset = no maximum.
     *
     * @generated from field: optional int32 max_signals = 4;
     */
    maxSignals?: number;
    /**
     * Pin the user-defined transmitter to this specific mode. If unset, the
     * user picks any mode they want (subject to the parent TransmitterOptions
     * gates).
     *
     * @generated from field: optional mochabugapis.adapt.graph.v1.Transmitter.Mode locked_mode = 5;
     */
    lockedMode?: Transmitter_ModeJson;
};
/**
 * Describes the message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterLock.
 * Use `create(UserDefinedExchangeOptions_TransmitterLockSchema)` to create a new message.
 */
export declare const UserDefinedExchangeOptions_TransmitterLockSchema: GenMessage<UserDefinedExchangeOptions_TransmitterLock, {
    jsonType: UserDefinedExchangeOptions_TransmitterLockJson;
}>;
/**
 * ReceiverLock opens up a specific named input receiver within a locked
 * exchange. Receivers NOT listed in locks are fully frozen. Inputs have no
 * mode/streaming concept, so this is simpler than TransmitterLock.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverLock
 */
export type UserDefinedExchangeOptions_ReceiverLock = Message<"mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverLock"> & {
    /**
     * Name of the receiver to open up.
     *
     * @generated from field: string name = 1;
     */
    name: string;
    /**
     * Signals that remain locked within this receiver.
     * Unlisted signals are free to modify.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.SignalLock signal_locks = 2;
     */
    signalLocks: UserDefinedExchangeOptions_SignalLock[];
    /**
     * Minimum total signals (including locked ones). Unset = no minimum.
     *
     * @generated from field: optional int32 min_signals = 3;
     */
    minSignals?: number | undefined;
    /**
     * Maximum total signals (including locked ones). Unset = no maximum.
     *
     * @generated from field: optional int32 max_signals = 4;
     */
    maxSignals?: number | undefined;
};
/**
 * ReceiverLock opens up a specific named input receiver within a locked
 * exchange. Receivers NOT listed in locks are fully frozen. Inputs have no
 * mode/streaming concept, so this is simpler than TransmitterLock.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverLock
 */
export type UserDefinedExchangeOptions_ReceiverLockJson = {
    /**
     * Name of the receiver to open up.
     *
     * @generated from field: string name = 1;
     */
    name?: string;
    /**
     * Signals that remain locked within this receiver.
     * Unlisted signals are free to modify.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.SignalLock signal_locks = 2;
     */
    signalLocks?: UserDefinedExchangeOptions_SignalLockJson[];
    /**
     * Minimum total signals (including locked ones). Unset = no minimum.
     *
     * @generated from field: optional int32 min_signals = 3;
     */
    minSignals?: number;
    /**
     * Maximum total signals (including locked ones). Unset = no maximum.
     *
     * @generated from field: optional int32 max_signals = 4;
     */
    maxSignals?: number;
};
/**
 * Describes the message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverLock.
 * Use `create(UserDefinedExchangeOptions_ReceiverLockSchema)` to create a new message.
 */
export declare const UserDefinedExchangeOptions_ReceiverLockSchema: GenMessage<UserDefinedExchangeOptions_ReceiverLock, {
    jsonType: UserDefinedExchangeOptions_ReceiverLockJson;
}>;
/**
 * TransmitterOptions restricts the output side of user-defined exchanges.
 * Streaming is gated (real fork-explosion concern); failure mode is not
 * gated at this level because it's a per-transmitter property without a
 * similar cost. Use TransmitterLock.locked_mode if a specific transmitter
 * must declare a particular mode.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterOptions
 */
export type UserDefinedExchangeOptions_TransmitterOptions = Message<"mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterOptions"> & {
    /**
     * Whether streaming transmitters are allowed.
     * Unset or true = allowed. False = forbidden.
     *
     * @generated from field: optional bool allow_streaming = 1;
     */
    allowStreaming?: boolean | undefined;
    /**
     * Transmitter locks. Each entry opens up a specific transmitter.
     * In a locked exchange, transmitters NOT listed here are fully frozen.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterLock locks = 2;
     */
    locks: UserDefinedExchangeOptions_TransmitterLock[];
    /**
     * Minimum number of transmitters. Unset = no minimum.
     *
     * @generated from field: optional int32 min_transmitters = 3;
     */
    minTransmitters?: number | undefined;
    /**
     * Maximum number of transmitters. Unset = no maximum.
     *
     * @generated from field: optional int32 max_transmitters = 4;
     */
    maxTransmitters?: number | undefined;
};
/**
 * TransmitterOptions restricts the output side of user-defined exchanges.
 * Streaming is gated (real fork-explosion concern); failure mode is not
 * gated at this level because it's a per-transmitter property without a
 * similar cost. Use TransmitterLock.locked_mode if a specific transmitter
 * must declare a particular mode.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterOptions
 */
export type UserDefinedExchangeOptions_TransmitterOptionsJson = {
    /**
     * Whether streaming transmitters are allowed.
     * Unset or true = allowed. False = forbidden.
     *
     * @generated from field: optional bool allow_streaming = 1;
     */
    allowStreaming?: boolean;
    /**
     * Transmitter locks. Each entry opens up a specific transmitter.
     * In a locked exchange, transmitters NOT listed here are fully frozen.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterLock locks = 2;
     */
    locks?: UserDefinedExchangeOptions_TransmitterLockJson[];
    /**
     * Minimum number of transmitters. Unset = no minimum.
     *
     * @generated from field: optional int32 min_transmitters = 3;
     */
    minTransmitters?: number;
    /**
     * Maximum number of transmitters. Unset = no maximum.
     *
     * @generated from field: optional int32 max_transmitters = 4;
     */
    maxTransmitters?: number;
};
/**
 * Describes the message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterOptions.
 * Use `create(UserDefinedExchangeOptions_TransmitterOptionsSchema)` to create a new message.
 */
export declare const UserDefinedExchangeOptions_TransmitterOptionsSchema: GenMessage<UserDefinedExchangeOptions_TransmitterOptions, {
    jsonType: UserDefinedExchangeOptions_TransmitterOptionsJson;
}>;
/**
 * ReceiverOptions restricts the input side of user-defined exchanges. Inputs
 * have no mode/streaming concept, so there are no allow-flags here.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverOptions
 */
export type UserDefinedExchangeOptions_ReceiverOptions = Message<"mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverOptions"> & {
    /**
     * Receiver locks. Each entry opens up a specific receiver.
     * In a locked exchange, receivers NOT listed here are fully frozen.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverLock locks = 1;
     */
    locks: UserDefinedExchangeOptions_ReceiverLock[];
    /**
     * Minimum number of receivers. Unset = no minimum.
     *
     * @generated from field: optional int32 min_receivers = 2;
     */
    minReceivers?: number | undefined;
    /**
     * Maximum number of receivers. Unset = no maximum.
     *
     * @generated from field: optional int32 max_receivers = 3;
     */
    maxReceivers?: number | undefined;
};
/**
 * ReceiverOptions restricts the input side of user-defined exchanges. Inputs
 * have no mode/streaming concept, so there are no allow-flags here.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverOptions
 */
export type UserDefinedExchangeOptions_ReceiverOptionsJson = {
    /**
     * Receiver locks. Each entry opens up a specific receiver.
     * In a locked exchange, receivers NOT listed here are fully frozen.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverLock locks = 1;
     */
    locks?: UserDefinedExchangeOptions_ReceiverLockJson[];
    /**
     * Minimum number of receivers. Unset = no minimum.
     *
     * @generated from field: optional int32 min_receivers = 2;
     */
    minReceivers?: number;
    /**
     * Maximum number of receivers. Unset = no maximum.
     *
     * @generated from field: optional int32 max_receivers = 3;
     */
    maxReceivers?: number;
};
/**
 * Describes the message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverOptions.
 * Use `create(UserDefinedExchangeOptions_ReceiverOptionsSchema)` to create a new message.
 */
export declare const UserDefinedExchangeOptions_ReceiverOptionsSchema: GenMessage<UserDefinedExchangeOptions_ReceiverOptions, {
    jsonType: UserDefinedExchangeOptions_ReceiverOptionsJson;
}>;
/**
 * ExchangeLock locks a plugin-defined exchange.
 * If neither transmitter_options nor receiver_options is set, the entire
 * exchange is locked. If set, only the specified transmitters/receivers/
 * signals are locked and users can add/remove the rest.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ExchangeLock
 */
export type UserDefinedExchangeOptions_ExchangeLock = Message<"mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ExchangeLock"> & {
    /**
     * Name of the exchange to lock.
     *
     * @generated from field: string name = 1;
     */
    name: string;
    /**
     * Locks on output transmitters within this exchange.
     *
     * @generated from field: optional mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterOptions transmitter_options = 2;
     */
    transmitterOptions?: UserDefinedExchangeOptions_TransmitterOptions | undefined;
    /**
     * Locks on input receivers within this exchange.
     *
     * @generated from field: optional mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverOptions receiver_options = 3;
     */
    receiverOptions?: UserDefinedExchangeOptions_ReceiverOptions | undefined;
};
/**
 * ExchangeLock locks a plugin-defined exchange.
 * If neither transmitter_options nor receiver_options is set, the entire
 * exchange is locked. If set, only the specified transmitters/receivers/
 * signals are locked and users can add/remove the rest.
 *
 * @generated from message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ExchangeLock
 */
export type UserDefinedExchangeOptions_ExchangeLockJson = {
    /**
     * Name of the exchange to lock.
     *
     * @generated from field: string name = 1;
     */
    name?: string;
    /**
     * Locks on output transmitters within this exchange.
     *
     * @generated from field: optional mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.TransmitterOptions transmitter_options = 2;
     */
    transmitterOptions?: UserDefinedExchangeOptions_TransmitterOptionsJson;
    /**
     * Locks on input receivers within this exchange.
     *
     * @generated from field: optional mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ReceiverOptions receiver_options = 3;
     */
    receiverOptions?: UserDefinedExchangeOptions_ReceiverOptionsJson;
};
/**
 * Describes the message mochabugapis.adapt.graph.v1.UserDefinedExchangeOptions.ExchangeLock.
 * Use `create(UserDefinedExchangeOptions_ExchangeLockSchema)` to create a new message.
 */
export declare const UserDefinedExchangeOptions_ExchangeLockSchema: GenMessage<UserDefinedExchangeOptions_ExchangeLock, {
    jsonType: UserDefinedExchangeOptions_ExchangeLockJson;
}>;
//# sourceMappingURL=user_defined_exchange_options_pb.d.ts.map