70 lines
1.9 KiB
Rust
70 lines
1.9 KiB
Rust
use serde::{Deserialize, Serialize};
|
|
use crate::core::{SledModel, Storable};
|
|
use std::collections::HashMap;
|
|
|
|
/// Role represents the role of a member in a circle
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub enum Role {
|
|
Admin,
|
|
Stakeholder,
|
|
Member,
|
|
Contributor,
|
|
Guest,
|
|
}
|
|
|
|
/// Member represents a member of a circle
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct Member {
|
|
pub pubkeys: Vec<String>, // public keys of the member
|
|
pub emails: Vec<String>, // list of emails
|
|
pub name: String, // name of the member
|
|
pub description: String, // optional description
|
|
pub role: Role, // role of the member in the circle
|
|
}
|
|
|
|
/// Circle represents a collection of members (users or other circles)
|
|
#[derive(Debug, Clone, Serialize, Deserialize)]
|
|
pub struct Circle {
|
|
pub id: u32, // unique id
|
|
pub name: String, // name of the circle
|
|
pub description: String, // optional description
|
|
pub members: Vec<Member>, // members of the circle
|
|
}
|
|
|
|
impl Circle {
|
|
/// Create a new circle
|
|
pub fn new(id: u32, name: String, description: String) -> Self {
|
|
Self {
|
|
id,
|
|
name,
|
|
description,
|
|
members: Vec::new(),
|
|
}
|
|
}
|
|
|
|
/// Add a member to the circle
|
|
pub fn add_member(&mut self, member: Member) {
|
|
self.members.push(member);
|
|
}
|
|
|
|
/// Returns a map of index keys for this circle
|
|
pub fn index_keys(&self) -> HashMap<String, String> {
|
|
let mut keys = HashMap::new();
|
|
keys.insert("name".to_string(), self.name.clone());
|
|
keys
|
|
}
|
|
}
|
|
|
|
// Implement Storable trait (provides default dump/load)
|
|
impl Storable for Circle {}
|
|
|
|
// Implement SledModel trait
|
|
impl SledModel for Circle {
|
|
fn get_id(&self) -> String {
|
|
self.id.to_string()
|
|
}
|
|
|
|
fn db_prefix() -> &'static str {
|
|
"circle"
|
|
}
|
|
} |