可以省略或传递一些“any”类型吗?
我想能够定义一个单独的“队列”,它可以通过为不同的作业注册处理器来使用。类似
how bull queue
在节点工程中。
排队的人不应该关心
<P, R>
处理器上的泛型。它的唯一任务是将一个作业排队,获取该作业的处理器(与处理器注册的“名称”关联)并将该作业转发给它。
processors
上的属性
Queue
结构需要一些泛型类型才能传递给它。我试着用一种特质来回避这个问题,但我有点回到了我开始的地方。
我想我是在模仿打字稿
any
键入。
我已经看到使用枚举的建议,该枚举将指定不同的作业类型;但是,这将使创建可重用队列imo的处理器复杂化。
如果我要这样做,而不是让用户只注册不同的处理器,他们将不得不注册它们以及修改新作业类型的枚举。另外,由于作业是基于关联的处理器进行匹配的,因此模式匹配没有好处。
我要找的似乎就是戴恩的特质。但是,我不明白当特征有关联类型时它是如何工作的。
#[derive(Debug)]
struct JobOptions {}
#[allow(unused)]
#[derive(Debug)]
struct Job<P, R> {
processor: String,
payload: Box<P>,
response: Option<Box<R>>,
options: Option<JobOptions>,
status: JobStatus,
}
#[allow(unused)]
struct Processor<P, R> {
name: String,
queue: VecDeque<Rc<Cell<Job<P, R>>>>,
}
trait JobProcessor {
type Payload;
type Response;
}
impl<P, R> JobProcessor for Processor<P, R> {
type Payload = P;
type Response = R;
}
#[derive(Default)]
struct Queue {
processors: HashMap<String, Rc<Cell<JobProcessor<?, ?>>>>,
}