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/ 可以实现可变长编码