#编译器插件 #标注 #帮助

typed

用于编译器插件的简单类型标注

1 个稳定版本

使用旧的 Rust 2015

1.0.0 2017年7月28日

#13 in #标注

MIT/Apache

3KB

rust-typed


lib.rs:

typed

这是一个用于帮助 rustc 的类型标注。这对于代码生成很有用。

用法

没有 ufcs,这不起作用,因为它是不明确的。

trait ChangeWatcher<T> {
  fn is_changed(&self) -> bool;
}

struct DbConfig;
struct AppConfig;

struct Context;

impl ChangeWatcher<DbConfig> for Context {
  fn is_changed(&self) -> bool { false }
}
impl ChangeWatcher<AppConfig> for Context {
  fn is_changed(&self) -> bool { false }
}



fn some<C: ChangeWatcher<DbConfig> + ChangeWatcher<AppConfig>>(c: C) {
  if <C as ChangeWatcher<DbConfig>>::is_changed(&c) {

  }
}

但这是有效的。

extern crate typed;
use typed::{Type, type_of};


trait ChangeWatcher<T> {
  fn is_changed(&self, _: Type<T>) -> bool;
}

struct DbConfig;
struct AppConfig;

struct Context;

impl ChangeWatcher<DbConfig> for Context {
  fn is_changed(&self, _: Type<DbConfig>) -> bool { false }
}
impl ChangeWatcher<AppConfig> for Context {
  fn is_changed(&self, _: Type<AppConfig>) -> bool { false }
}


fn some<C: ChangeWatcher<DbConfig> + ChangeWatcher<AppConfig>>(c: C) {
  if c.is_changed(type_of::<DbConfig>()) {

  }
}

无运行时依赖