У меня есть черта, которую я использую в качестве интерфейса для ActiveJob Rails;Я хочу, чтобы мой сервер Rust запускал задания, обрабатываемые Rails API:
trait BackgroundJob {
type Args: Serialize;
const QUEUE: &'static str;
const CLASS: JobClass;
fn payload(self) -> Self::Args;
}
Пример реализации этой черты:
impl BackgroundJob for MyJob {
type Args = (String,);
const QUEUE: &'static str = "my_queue";
const CLASS: JobClass = JobClass::Job1;
fn payload(self) -> Self::Args {
(self.payload,)
}
}
площадка
В моем приложении код немного сложнее (в частности, у меня вместо универсальной функции актер Actix вместо BackgroundJob
), но идея та же.
Этот код работает нормальноно я должен убедиться, что все реализации BackgroundJob
будут иметь в качестве параметра типа Args
что-то, что будет сериализовано в массив JSON (для работы с активным заданием).
Что я хотел быdo - иметь гарантию времени компиляции, что Args
будет сериализован в массив.Это возможно?
Я пытался обойтись с чертами SerializeTuple
и SerializeSeq
от Serde, но безуспешно.