#pragma once
#include <string>
#include <variant>

namespace switchboard::extensions::onnx {

struct CpuProvider {
};

struct CudaProvider {
};

struct OpenVinoProvider {
    std::string device;
    
    OpenVinoProvider(const std::string& dev = "CPU") : device(dev) {}
};

struct DirectMLProvider {
    int deviceId;
    
    DirectMLProvider(int id = 0) : deviceId(id) {}
};

struct CoreMLProvider {
    bool useNPU;
    
    CoreMLProvider(bool enableNPU = false) : useNPU(enableNPU) {}
};

using OnnxProvider = std::variant<CpuProvider, CudaProvider, OpenVinoProvider, DirectMLProvider, CoreMLProvider>;

}