首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以将任何泛型枚举指定为struct字段的类型?

是否可以将任何泛型枚举指定为struct字段的类型?
EN

Stack Overflow用户
提问于 2022-10-10 20:51:47
回答 1查看 45关注 0票数 1

我正在提供一个接口来管理不同数据库上的权限。我有一个Apply特性,不同的数据库可以实现它来授予一个Permission

代码语言:javascript
复制
pub trait Apply {
    fn apply(&self, permission: Permission) -> Result<(), Box<dyn Error>>;
}

object_type是一个String,但我更希望每个数据库实现都提供自己的自定义枚举。例如,Postgres数据库可能有Database, Schema, Sequences等等。雪花数据库可能有Account, Database, File Format等。

代码语言:javascript
复制
pub struct Permission {
    pub object: String,
    pub object_type: String,
    pub grantee: String,
    pub privileges: Vec<String>,
}

是否有可能让object_type成为一个通用枚举(如果存在这样的东西)?而不是一个特定的枚举?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-10-10 21:02:23

如果您询问是否可以使用泛型类型,则答案是肯定的,尽管您需要了解泛型是如何工作的以及它们带来了什么。

让我们做一个简单的练习:

代码语言:javascript
复制
pub struct Permission<T> {
    pub object_type: T,
    // ...
}

这里我们说,Permission结构接收一个泛型类型参数,并在object_type字段上使用该类型。这给了我们很大的灵活性,这意味着现在我们可以创建不同的Permission实例,比如使用String的第一个示例。

代码语言:javascript
复制
let permission_with_string_as_object_type = Permission::<String>... // You construct the instance

或者用一个枚举:

代码语言:javascript
复制
enum MyDatabaseEnum {
...
}

let permission_with_my_database_enum_as_object_type = Permission::<MyDatabaseEnum> ... // You construct the instance

如果需要,还可以对泛型类型参数设置界限,这可以进一步帮助您准确描述对该泛型类型的期望。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74020556

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档