Trait fastsend::Serialer [−][src]
pub trait Serialer {
type Output: Display;
fn build(
self
) -> Pin<Box<dyn Future<Output = Self::Output> + Send + 'static>>;
fn feed(&mut self, data: &[u8]);
}Expand description
Serialer trait 代表了用于生成序列号的类型,其定义方式类似于标准库中的 Hasher trait,
但不同于 Hasher,在完成对序列号的构建的 build 方法会消耗 Serialer 本身(而 Hasher
的 finish 方法则仅使用了 &self)。
而与 Hasher 另一个不同点在于,对于同一个 Hasher,如果写入相同的数据,其产生的哈希值应是
相同的;但对于 Serialer 来说却有所不同,根据对 Serialer 的定义:
定义
对于每一个独立的 Serialer 实例,不论其是否被 feed 了相同的数据,最终使用 build 生成
的序列号均应具有唯一性,换句话说,Serialer 应保证产生的每一个序列号均不与相同 Serialer
产生的序列号重复(N 个 Serialer 生成的序列号数量应被保证为 N)。
Associated Types
Required methods
build 方法类似于 Hasher::finish 方法,消耗自身构建出序列号,值得注意的是,在许多场景下,
构建序列号的方式会依赖外部系统,因此在设计 build 的 API 时,考虑到调用外部系统往往需要使用
Future 来支持异步任务,在返回值的设计上选择了 Pin<Box<dyn Future>> 来提供对 async/await
的支持(这也是在当前 Rust 版本下,语法层面不支持 async-trait 的一种妥协方案)。
需要额外注意的是,返回的 Future 需要满足 Send + 'static 的约束,这是为了适配多数异步
Runtime 中多线程异步任务执行器对 Future 的约束。
