use indexmap::IndexMap;
use serde::{Deserialize, Serialize};
use typeshare::typeshare;
use crate::deserializers::string_list_deserializer;
use super::{
I64, MongoId, ResourceTargetVariant,
permission::PermissionLevelAndSpecifics,
};
#[typeshare]
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
#[cfg_attr(feature = "utoipa", derive(utoipa::ToSchema))]
#[cfg_attr(
feature = "mongo",
derive(mongo_indexed::derive::MongoIndexed)
)]
pub struct UserGroup {
#[serde(
default,
rename = "_id",
skip_serializing_if = "String::is_empty",
with = "bson::serde_helpers::hex_string_as_object_id"
)]
pub id: MongoId,
#[cfg_attr(feature = "mongo", unique_index)]
pub name: String,
#[cfg_attr(feature = "mongo", index)]
#[serde(default)]
pub everyone: bool,
#[cfg_attr(feature = "mongo", index)]
#[serde(default, deserialize_with = "string_list_deserializer")]
pub users: Vec<String>,
#[serde(default)]
#[cfg_attr(feature = "utoipa", schema(value_type = HashMap<ResourceTargetVariant, PermissionLevelAndSpecifics>))]
pub all:
IndexMap<ResourceTargetVariant, PermissionLevelAndSpecifics>,
#[serde(default)]
pub updated_at: I64,
}