import type { GenFile, GenMessage } from "@bufbuild/protobuf/codegenv2";
import type { SignalFormat, SignalFormatJson } from "./signal_format_pb";
import type { Message } from "@bufbuild/protobuf";
/**
 * Describes the file mochabugapis/adapt/graph/user_defined_exchange_options.proto.
 */
export declare const file_mochabugapis_adapt_graph_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.UserDefinedExchangeOptions
 */
export type UserDefinedExchangeOptions = Message<"mochabugapis.adapt.graph.UserDefinedExchangeOptions"> & {
    /**
     * Restrictions on transmitter transceivers within user-defined exchanges.
     * Unset = no restrictions beyond Exchange's own validation.
     *
     * @generated from field: optional mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverOptions transmitter_options = 1;
     */
    transmitterOptions?: UserDefinedExchangeOptions_TransceiverOptions;
    /**
     * Restrictions on receiver transceivers within user-defined exchanges.
     * Unset = no restrictions beyond Exchange's own validation.
     *
     * @generated from field: optional mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverOptions receiver_options = 2;
     */
    receiverOptions?: UserDefinedExchangeOptions_TransceiverOptions;
    /**
     * 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.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.UserDefinedExchangeOptions
 */
export type UserDefinedExchangeOptionsJson = {
    /**
     * Restrictions on transmitter transceivers within user-defined exchanges.
     * Unset = no restrictions beyond Exchange's own validation.
     *
     * @generated from field: optional mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverOptions transmitter_options = 1;
     */
    transmitterOptions?: UserDefinedExchangeOptions_TransceiverOptionsJson;
    /**
     * Restrictions on receiver transceivers within user-defined exchanges.
     * Unset = no restrictions beyond Exchange's own validation.
     *
     * @generated from field: optional mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverOptions receiver_options = 2;
     */
    receiverOptions?: UserDefinedExchangeOptions_TransceiverOptionsJson;
    /**
     * 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.UserDefinedExchangeOptions.ExchangeLock exchange_locks = 5;
     */
    exchangeLocks?: UserDefinedExchangeOptions_ExchangeLockJson[];
};
/**
 * Describes the message mochabugapis.adapt.graph.UserDefinedExchangeOptions.
 * Use `create(UserDefinedExchangeOptionsSchema)` to create a new message.
 */
export declare const UserDefinedExchangeOptionsSchema: GenMessage<UserDefinedExchangeOptions, {
    jsonType: UserDefinedExchangeOptionsJson;
}>;
/**
 * SignalLock constrains a specific signal within a transceiver.
 * Presence means the signal is locked. Fields grant exceptions.
 *
 * @generated from message mochabugapis.adapt.graph.UserDefinedExchangeOptions.SignalLock
 */
export type UserDefinedExchangeOptions_SignalLock = Message<"mochabugapis.adapt.graph.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.SignalFormat must_subsume = 2;
     */
    mustSubsume?: SignalFormat;
};
/**
 * SignalLock constrains a specific signal within a transceiver.
 * Presence means the signal is locked. Fields grant exceptions.
 *
 * @generated from message mochabugapis.adapt.graph.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.SignalFormat must_subsume = 2;
     */
    mustSubsume?: SignalFormatJson;
};
/**
 * Describes the message mochabugapis.adapt.graph.UserDefinedExchangeOptions.SignalLock.
 * Use `create(UserDefinedExchangeOptions_SignalLockSchema)` to create a new message.
 */
export declare const UserDefinedExchangeOptions_SignalLockSchema: GenMessage<UserDefinedExchangeOptions_SignalLock, {
    jsonType: UserDefinedExchangeOptions_SignalLockJson;
}>;
/**
 * TransceiverLock opens up a specific named transceiver within a locked exchange.
 * Transceivers NOT listed in locks are fully frozen.
 *
 * @generated from message mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverLock
 */
export type UserDefinedExchangeOptions_TransceiverLock = Message<"mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverLock"> & {
    /**
     * Name of the transceiver to open up.
     *
     * @generated from field: string name = 1;
     */
    name: string;
    /**
     * Signals that remain locked within this transceiver.
     * Unlisted signals are free to modify.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.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;
    /**
     * Maximum total signals (including locked ones). Unset = no maximum.
     *
     * @generated from field: optional int32 max_signals = 4;
     */
    maxSignals?: number;
};
/**
 * TransceiverLock opens up a specific named transceiver within a locked exchange.
 * Transceivers NOT listed in locks are fully frozen.
 *
 * @generated from message mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverLock
 */
export type UserDefinedExchangeOptions_TransceiverLockJson = {
    /**
     * Name of the transceiver to open up.
     *
     * @generated from field: string name = 1;
     */
    name?: string;
    /**
     * Signals that remain locked within this transceiver.
     * Unlisted signals are free to modify.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.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.UserDefinedExchangeOptions.TransceiverLock.
 * Use `create(UserDefinedExchangeOptions_TransceiverLockSchema)` to create a new message.
 */
export declare const UserDefinedExchangeOptions_TransceiverLockSchema: GenMessage<UserDefinedExchangeOptions_TransceiverLock, {
    jsonType: UserDefinedExchangeOptions_TransceiverLockJson;
}>;
/**
 * TransceiverOptions restricts transceivers within user-defined exchanges.
 *
 * @generated from message mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverOptions
 */
export type UserDefinedExchangeOptions_TransceiverOptions = Message<"mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverOptions"> & {
    /**
     * Whether streaming transceivers are allowed.
     * Unset or true = allowed. False = forbidden.
     *
     * @generated from field: optional bool allow_streaming = 1;
     */
    allowStreaming?: boolean;
    /**
     * Transceiver locks. Each entry opens up a specific transceiver.
     * In a locked exchange, transceivers NOT listed here are fully frozen.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverLock locks = 2;
     */
    locks: UserDefinedExchangeOptions_TransceiverLock[];
    /**
     * Minimum number of transceivers. Unset = no minimum.
     *
     * @generated from field: optional int32 min_transceivers = 3;
     */
    minTransceivers?: number;
    /**
     * Maximum number of transceivers. Unset = no maximum.
     *
     * @generated from field: optional int32 max_transceivers = 4;
     */
    maxTransceivers?: number;
};
/**
 * TransceiverOptions restricts transceivers within user-defined exchanges.
 *
 * @generated from message mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverOptions
 */
export type UserDefinedExchangeOptions_TransceiverOptionsJson = {
    /**
     * Whether streaming transceivers are allowed.
     * Unset or true = allowed. False = forbidden.
     *
     * @generated from field: optional bool allow_streaming = 1;
     */
    allowStreaming?: boolean;
    /**
     * Transceiver locks. Each entry opens up a specific transceiver.
     * In a locked exchange, transceivers NOT listed here are fully frozen.
     *
     * @generated from field: repeated mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverLock locks = 2;
     */
    locks?: UserDefinedExchangeOptions_TransceiverLockJson[];
    /**
     * Minimum number of transceivers. Unset = no minimum.
     *
     * @generated from field: optional int32 min_transceivers = 3;
     */
    minTransceivers?: number;
    /**
     * Maximum number of transceivers. Unset = no maximum.
     *
     * @generated from field: optional int32 max_transceivers = 4;
     */
    maxTransceivers?: number;
};
/**
 * Describes the message mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverOptions.
 * Use `create(UserDefinedExchangeOptions_TransceiverOptionsSchema)` to create a new message.
 */
export declare const UserDefinedExchangeOptions_TransceiverOptionsSchema: GenMessage<UserDefinedExchangeOptions_TransceiverOptions, {
    jsonType: UserDefinedExchangeOptions_TransceiverOptionsJson;
}>;
/**
 * 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 transceivers/signals are
 * locked and users can add/remove the rest.
 *
 * @generated from message mochabugapis.adapt.graph.UserDefinedExchangeOptions.ExchangeLock
 */
export type UserDefinedExchangeOptions_ExchangeLock = Message<"mochabugapis.adapt.graph.UserDefinedExchangeOptions.ExchangeLock"> & {
    /**
     * Name of the exchange to lock.
     *
     * @generated from field: string name = 1;
     */
    name: string;
    /**
     * Locks on transmitter transceivers within this exchange.
     *
     * @generated from field: optional mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverOptions transmitter_options = 2;
     */
    transmitterOptions?: UserDefinedExchangeOptions_TransceiverOptions;
    /**
     * Locks on receiver transceivers within this exchange.
     *
     * @generated from field: optional mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverOptions receiver_options = 3;
     */
    receiverOptions?: UserDefinedExchangeOptions_TransceiverOptions;
};
/**
 * 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 transceivers/signals are
 * locked and users can add/remove the rest.
 *
 * @generated from message mochabugapis.adapt.graph.UserDefinedExchangeOptions.ExchangeLock
 */
export type UserDefinedExchangeOptions_ExchangeLockJson = {
    /**
     * Name of the exchange to lock.
     *
     * @generated from field: string name = 1;
     */
    name?: string;
    /**
     * Locks on transmitter transceivers within this exchange.
     *
     * @generated from field: optional mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverOptions transmitter_options = 2;
     */
    transmitterOptions?: UserDefinedExchangeOptions_TransceiverOptionsJson;
    /**
     * Locks on receiver transceivers within this exchange.
     *
     * @generated from field: optional mochabugapis.adapt.graph.UserDefinedExchangeOptions.TransceiverOptions receiver_options = 3;
     */
    receiverOptions?: UserDefinedExchangeOptions_TransceiverOptionsJson;
};
/**
 * Describes the message mochabugapis.adapt.graph.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