/**
 * https://github.com/RobotWebTools/rosbridge_suite/blob/ros2/ROSBRIDGE_PROTOCOL.md
 */
export interface RosbridgeMessageBase {
    op: string;
}
export declare function isRosbridgeMessage(message: unknown): message is RosbridgeMessageBase;
export interface RosbridgeAuthMessage extends RosbridgeMessageBase {
    op: "auth";
    mac: string;
    client: string;
    dest: string;
    rand: string;
    t: number;
    level: string;
    end: number;
}
export interface RosbridgeStatusMessage extends RosbridgeMessageBase {
    op: "status";
    id?: string;
    level: string;
    msg: string;
}
export declare function isRosbridgeStatusMessage(message: RosbridgeMessageBase): message is RosbridgeStatusMessage;
export interface RosbridgeSetStatusLevelMessage extends RosbridgeMessageBase {
    op: "set_level";
    id?: string;
    level: "info" | "warning" | "error" | "none";
}
export declare function isRosbridgeSetStatusLevelMessage(message: RosbridgeMessageBase): message is RosbridgeSetStatusLevelMessage;
export interface RosbridgeFragmentMessage extends RosbridgeMessageBase {
    op: "fragment";
    id: string;
    data: string;
    num: number;
    total: number;
}
export declare function isRosbridgeFragmentMessage(message: RosbridgeMessageBase): message is RosbridgeFragmentMessage;
export interface RosbridgePngMessage extends RosbridgeMessageBase {
    op: "png";
    id?: string;
    data: string;
    num?: number;
    total?: number;
}
export declare function isRosbridgePngMessage(message: RosbridgeMessageBase): message is RosbridgePngMessage;
export interface RosbridgeAdvertiseMessage extends RosbridgeMessageBase {
    op: "advertise";
    id?: string;
    type: string;
    topic: string;
    latch?: boolean;
    queue_size?: number;
}
export declare function isRosbridgeAdvertiseMessage(message: RosbridgeMessageBase): message is RosbridgeAdvertiseMessage;
export interface RosbridgeUnadvertiseMessage extends RosbridgeMessageBase {
    op: "unadvertise";
    id?: string;
    topic: string;
}
export declare function isRosbridgeUnadvertiseMessage(message: RosbridgeMessageBase): message is RosbridgeUnadvertiseMessage;
export interface RosbridgePublishMessage<TMessage = unknown> extends RosbridgeMessageBase {
    op: "publish";
    id?: string;
    topic: string;
    msg: TMessage;
}
export declare function isRosbridgePublishMessage<T>(message: RosbridgeMessageBase): message is RosbridgePublishMessage<T>;
export interface RosbridgeSubscribeMessage extends RosbridgeMessageBase {
    op: "subscribe";
    id?: string;
    topic: string;
    type?: string;
    throttle_rate?: number;
    queue_length?: number;
    fragment_size?: number;
    compression?: string;
}
export declare function isRosbridgeSubscribeMessage(message: RosbridgeMessageBase): message is RosbridgeSubscribeMessage;
export interface RosbridgeUnsubscribeMessage extends RosbridgeMessageBase {
    op: "unsubscribe";
    id?: string;
    topic: string;
}
export declare function isRosbridgeUnsubscribeMessage(message: RosbridgeMessageBase): message is RosbridgeUnsubscribeMessage;
export interface RosbridgeAdvertiseServiceMessage extends RosbridgeMessageBase {
    op: "advertise_service";
    type: string;
    service: string;
}
export declare function isRosbridgeAdvertiseServiceMessage(message: RosbridgeMessageBase): message is RosbridgeAdvertiseServiceMessage;
export interface RosbridgeUnadvertiseServiceMessage extends RosbridgeMessageBase {
    op: "unadvertise_service";
    service: string;
}
export declare function isRosbridgeUnadvertiseServiceMessage(message: RosbridgeMessageBase): message is RosbridgeUnadvertiseServiceMessage;
export interface RosbridgeCallServiceMessage<TArgs = unknown> extends RosbridgeMessageBase {
    op: "call_service";
    id?: string;
    service: string;
    /**
     * TODO this should be deeply partial when *outgoing*, because rosbridge will "fill in the blanks",
     * but it's not partial when *incoming* - need to figure out a way to represent this.
     */
    args: TArgs;
    fragment_size?: number;
    compression?: string;
    timeout?: number;
}
export declare function isRosbridgeCallServiceMessage<T>(message: RosbridgeMessageBase): message is RosbridgeCallServiceMessage<T>;
interface BaseRosbridgeServiceResponseMessage extends RosbridgeMessageBase {
    op: "service_response";
    id?: string;
    service: string;
}
/** If the service call failed, `values` will be a string error message. */
export interface FailedRosbridgeServiceResponseMessage extends BaseRosbridgeServiceResponseMessage {
    values?: string;
    result: false;
}
export interface SuccessfulRosbridgeServiceResponseMessage<TValues = unknown> extends BaseRosbridgeServiceResponseMessage {
    values: TValues;
    result: true;
}
export type RosbridgeServiceResponseMessage<TValues = unknown> = FailedRosbridgeServiceResponseMessage | SuccessfulRosbridgeServiceResponseMessage<TValues>;
export declare function isRosbridgeServiceResponseMessage<T>(message: RosbridgeMessageBase): message is RosbridgeServiceResponseMessage<T>;
export interface RosbridgeAdvertiseActionMessage extends RosbridgeMessageBase {
    op: "advertise_action";
    type: string;
    action: string;
}
export declare function isRosbridgeAdvertiseActionMessage(message: RosbridgeMessageBase): message is RosbridgeAdvertiseActionMessage;
export interface RosbridgeUnadvertiseActionMessage extends RosbridgeMessageBase {
    op: "unadvertise_action";
    action: string;
}
export declare function isRosbridgeUnadvertiseActionMessage(message: RosbridgeMessageBase): message is RosbridgeUnadvertiseActionMessage;
export interface RosbridgeSendActionGoalMessage<TArgs = unknown> extends RosbridgeMessageBase {
    op: "send_action_goal";
    id: string;
    action: string;
    action_type: string;
    args?: TArgs;
    feedback?: boolean;
    fragment_size?: number;
    compression?: string;
}
export declare function isRosbridgeSendActionGoalMessage<TArgs = unknown>(message: RosbridgeMessageBase): message is RosbridgeSendActionGoalMessage<TArgs>;
export interface RosbridgeCancelActionGoalMessage extends RosbridgeMessageBase {
    op: "cancel_action_goal";
    id: string;
    action: string;
}
export declare function isRosbridgeCancelActionGoalMessage(message: RosbridgeMessageBase): message is RosbridgeCancelActionGoalMessage;
export interface RosbridgeActionFeedbackMessage<TFeedback = unknown> extends RosbridgeMessageBase {
    op: "action_feedback";
    id: string;
    action: string;
    values: TFeedback;
}
export declare function isRosbridgeActionFeedbackMessage<TFeedback = unknown>(message: RosbridgeMessageBase): message is RosbridgeActionFeedbackMessage<TFeedback>;
interface RosbridgeActionResultMessageBase extends RosbridgeMessageBase {
    op: "action_result";
    id: string;
    action: string;
    status: number;
}
export interface FailedRosbridgeActionResultMessage extends RosbridgeActionResultMessageBase {
    result: false;
    values?: string;
}
export interface SuccessfulRosbridgeActionResultMessage<TResultValues = unknown> extends RosbridgeActionResultMessageBase {
    values: TResultValues;
    result: true;
}
export type RosbridgeActionResultMessage<TResultValues = unknown> = FailedRosbridgeActionResultMessage | SuccessfulRosbridgeActionResultMessage<TResultValues>;
export declare function isRosbridgeActionResultMessage<TResultValues = unknown>(message: RosbridgeMessageBase): message is RosbridgeActionResultMessage<TResultValues>;
export interface RosbridgeActionStatusMessage extends RosbridgeMessageBase {
    op: "action_status";
    id: string;
    action: string;
    status: number;
}
export declare function isRosbridgeActionStatusMessage(message: RosbridgeMessageBase): message is RosbridgeActionStatusMessage;
export type RosbridgeMessage = RosbridgeAuthMessage | RosbridgeStatusMessage | RosbridgeSetStatusLevelMessage | RosbridgeFragmentMessage | RosbridgePngMessage | RosbridgeAdvertiseMessage | RosbridgeUnadvertiseMessage | RosbridgePublishMessage | RosbridgeSubscribeMessage | RosbridgeUnsubscribeMessage | RosbridgeAdvertiseServiceMessage | RosbridgeUnadvertiseServiceMessage | RosbridgeCallServiceMessage | RosbridgeServiceResponseMessage | RosbridgeAdvertiseActionMessage | RosbridgeUnadvertiseActionMessage | RosbridgeSendActionGoalMessage | RosbridgeCancelActionGoalMessage | RosbridgeActionFeedbackMessage | RosbridgeActionResultMessage;
export {};
