#type #compile-time #checking #ignore #stub #function #onlytypes-rs

onlytypes

一个用于创建只能由特定函数创建的类型库

4个版本

0.1.4 2023年10月21日
0.1.2 2023年10月21日
0.1.1 2023年10月20日
0.1.0 2023年10月20日

#807 in 过程宏

Download history 15/week @ 2024-03-11 27/week @ 2024-04-01

每月74次下载

MIT许可证

13KB
232

Only Types, for Rust

允许你忽略impl块,或创建存根函数。如果你只需要编译时类型检查,这个库适合你。或者如果你不希望向用户传输大量的冗余数据,这个库也适合你。

示例

use std::fmt;

pub trait MyTrait {
    type Output;
    fn my_trait_function(&self) -> Self::Output;
    fn some_other_trait_function(&self) -> Self::Output;
}

pub struct MyStruct {
    pub key: String,
    pub value: String
}

#[onlytypes::ignore] // Completely ignores this impl block
impl MyStruct {
    pub fn new(key: String, value: String) -> Self {
        Self { key, value }
    }
    pub fn key(&self) -> &str {
        self.key.as_str()
    }
    pub fn value(&self) -> &str {
        self.value.as_str()
    }
    pub fn to_json(&self) -> String {
        format!("{{\"key\": \"{}\", \"value\": \"{}\"}}", self.key(), self.value())
    }
}

impl fmt::Debug for MyStruct {
    #[onlytypes::stub]// Will stub this function (but still compile)
    fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
        f.debug_struct("PublicStruct")
            .field("key", &self.key())
            .field("value", &self.value())
            .finish()
    }
}

#[onlytypes::stub]// Will stub the entire impl block (but still compile)
impl MyTrait for MyStruct {
    type Output = String;
    fn my_trait_function(&self) -> Self::Output {
        format!("{}: {}", self.key(), self.value())
    }
    fn some_other_trait_function(&self) -> Self::Output {
        format!("{}: {}", self.key(), self.value())
    }
}

更新日志

依赖

~280–730KB
~17K SLoC