rust-from-example

repr(Rust) repe(C)

rkyv 使用的时候严格要求内存对齐相关的约束 repr(Rust) repe(C)

redis-rs + redis_ts-rs

在内部的fork中我在里面添加了AsyncTsCommands就是使用了这个Specialization

 1pub trait AsyncTsCommands: ConnectionLike + Send + Sized {
 2    /// Returns information about a redis time series key.
 3    default fn ts_info<'a, K: ToRedisArgs + Send + Sync + 'a>(&'a mut self, key: K) -> RedisFuture<TsInfo> {
 4        Box::pin(async move { cmd("TS.INFO").arg(key).query_async(self).await })
 5    }
 6
 7    /// Creates a new redis time series key.
 8    default fn ts_create<'a, K: ToRedisArgs + Send + Sync + 'a, RV: FromRedisValue>(
 9        &'a mut self,
10        key: K,
11        options: TsOptions,
12    ) -> RedisFuture<RV> {
13        Box::pin(async move {
14            cmd("TS.CREATE")
15                .arg(key)
16                .arg(options)
17                .query_async(self)
18                .await
19        })
20    }

插件形式动态调用

我具体是首先写出来最小的WIP 然后通过DeriveInput来解析成目标代码 只需要一个#[Stragety]就可以解析成目标代码 目前我还没有实践过ui-test相关 dll内的日志的话有说法是调整link的包就可以解决我选择一个比较易懂的方案来实现 就是暴力直接设定指针在dll的全局变量(这个东西在哪里释放我也不是很清楚,我的dll设置成NO_DELETE)

自行实现某种编码

使用tokio_codec 可以非常方便实现基于rkyv的字节流编码

Backup

https://docs.rs/socket2/latest/socket2/ 如果需要手动构建调整一些socket选项必须用这个 github.com/dtolnay/anyhow thiserror scc/dashmap 并发哈希图 arcswap fnv/fxhashmap/ahash serde/simdjson/snoic-rs rkyv insta/next test/ fastwebsocket https://docs.rs/unsigned-varint/latest/unsigned_varint/ 可以实现可变长编码