# ------------------------------------------------------------------------
# RF-DETR
# Copyright (c) 2025 Roboflow. All Rights Reserved.
# Licensed under the Apache License, Version 2.0 [see LICENSE for details]
# ------------------------------------------------------------------------
"""Exporter protocol — enables dependency-inversion for model export."""

from pathlib import Path
from typing import Protocol, runtime_checkable

import torch.nn as nn


@runtime_checkable
class ExporterProtocol(Protocol):
    """Protocol for model exporters.

    Any callable or class that matches this signature can be registered as an exporter without inheriting from a base
    class.
    """

    def __call__(
        self,
        model: nn.Module,
        input_shape: tuple[int, ...],
        output_path: Path,
    ) -> Path:
        """Export *model* to *output_path*.

        Args:
            model: The PyTorch model to export.
            input_shape: Input tensor shape (excluding batch dimension).
            output_path: Destination path for the exported artifact.

        Returns:
            The resolved path to the exported file.
        """
        ...
