use crate::authzed::api::v1::ObjectReference;
type ObjectId = String;
pub enum SpiceDbObject {
Server(ObjectId),
Channel(ObjectId),
User(ObjectId),
PermissionOverride(ObjectId),
}
impl SpiceDbObject {
pub(crate) fn id(&self) -> ObjectId {
match self {
SpiceDbObject::Server(id) => id.clone(),
SpiceDbObject::Channel(id) => id.clone(),
SpiceDbObject::User(id) => id.clone(),
SpiceDbObject::PermissionOverride(id) => id.clone(),
}
}
pub(crate) fn object_name(&self) -> String {
match self {
SpiceDbObject::Server(_) => "server".to_string(),
SpiceDbObject::Channel(_) => "channel".to_string(),
SpiceDbObject::User(_) => "user".to_string(),
SpiceDbObject::PermissionOverride(_) => "permission_override".to_string(),
}
}
pub(crate) fn get_object_type(&self) -> &str {
match self {
SpiceDbObject::Server(_) => "server",
SpiceDbObject::Channel(_) => "channel",
SpiceDbObject::User(_) => "user",
SpiceDbObject::PermissionOverride(_) => "permission_override",
}
}
pub(crate) fn get_object_id(&self) -> &str {
match self {
SpiceDbObject::Server(id) => id,
SpiceDbObject::Channel(id) => id,
SpiceDbObject::User(id) => id,
SpiceDbObject::PermissionOverride(id) => id,
}
}
}
impl Into<ObjectReference> for SpiceDbObject {
fn into(self) -> ObjectReference {
ObjectReference {
object_type: self.object_name(),
object_id: self.id(),
}
}
}