我正在提供一个接口来管理不同数据库上的权限。我有一个Apply特性,不同的数据库可以实现它来授予一个Permission
pub trait Apply {
fn apply(&self, permission: Permission) -> Result<(), Box<dyn Error>>;
}object_type是一个String,但我更希望每个数据库实现都提供自己的自定义枚举。例如,Postgres数据库可能有Database, Schema, Sequences等等。雪花数据库可能有Account, Database, File Format等。
pub struct Permission {
pub object: String,
pub object_type: String,
pub grantee: String,
pub privileges: Vec<String>,
}是否有可能让object_type成为一个通用枚举(如果存在这样的东西)?而不是一个特定的枚举?
发布于 2022-10-10 21:02:23
如果您询问是否可以使用泛型类型,则答案是肯定的,尽管您需要了解泛型是如何工作的以及它们带来了什么。
让我们做一个简单的练习:
pub struct Permission<T> {
pub object_type: T,
// ...
}这里我们说,Permission结构接收一个泛型类型参数,并在object_type字段上使用该类型。这给了我们很大的灵活性,这意味着现在我们可以创建不同的Permission实例,比如使用String的第一个示例。
let permission_with_string_as_object_type = Permission::<String>... // You construct the instance或者用一个枚举:
enum MyDatabaseEnum {
...
}
let permission_with_my_database_enum_as_object_type = Permission::<MyDatabaseEnum> ... // You construct the instance如果需要,还可以对泛型类型参数设置界限,这可以进一步帮助您准确描述对该泛型类型的期望。
https://stackoverflow.com/questions/74020556
复制相似问题