是否可以省略或传递某些“任何”类型?
我希望能够定义一个“队列”,该“队列”可以通过注册用于不同作业的处理器来使用。类似于Node的how bull queue。
队列不必关心处理器上的<P, R>
泛型。它唯一的工作就是排队一个工作,获取该工作的处理器(与注册该处理器的“名称”相关联)并将该工作转发给它。
但是,processors
结构上的Queue
属性需要一些通用类型来传递给它。我试图通过使用特质来解决这个问题,但我有点退缩。
我想我正在尝试模仿TypeScript any
类型。
我已经看到建议使用一个枚举来指定不同的工作类型;但是,这会使创建可重复使用的队列imo的处理器复杂化。
如果要执行此操作,则除了让用户仅注册其他处理器外,他们还必须注册它们并修改新作业类型的枚举。此外,由于作业是根据关联的处理器进行匹配的,因此模式匹配将无济于事。
dyn特质似乎是我想要的。但是,当特征具有关联类型时,我看不到它如何工作。
#[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<?, ?>>>>,
}