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 本身(而 Hasherfinish 方法则仅使用了 &self)。

而与 Hasher 另一个不同点在于,对于同一个 Hasher,如果写入相同的数据,其产生的哈希值应是 相同的;但对于 Serialer 来说却有所不同,根据对 Serialer 的定义:

定义

对于每一个独立的 Serialer 实例,不论其是否被 feed 了相同的数据,最终使用 build 生成 的序列号均应具有唯一性,换句话说,Serialer 应保证产生的每一个序列号均不与相同 Serialer 产生的序列号重复(N 个 Serialer 生成的序列号数量应被保证为 N)。

Associated Types

Output 是代表序列号的类型,其应实现 Display trait,这也意味着序列号能通过 ToString trait 转化为 String 类型。

Required methods

build 方法类似于 Hasher::finish 方法,消耗自身构建出序列号,值得注意的是,在许多场景下, 构建序列号的方式会依赖外部系统,因此在设计 build 的 API 时,考虑到调用外部系统往往需要使用 Future 来支持异步任务,在返回值的设计上选择了 Pin<Box<dyn Future>> 来提供对 async/await 的支持(这也是在当前 Rust 版本下,语法层面不支持 async-trait 的一种妥协方案)。

需要额外注意的是,返回的 Future 需要满足 Send + 'static 的约束,这是为了适配多数异步 Runtime 中多线程异步任务执行器对 Future 的约束。

feed 用于向 Serialer 提供用于生成序列号的必要信息,类似于 Hasher trait 中的 write 方法。

Implementors