use proton_sdk::ids::{NodeUid, ShareId, ShareMembershipId};
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MemberRole {
Viewer,
Editor,
Admin,
Inherited,
}
impl MemberRole {
pub fn to_permissions(self) -> Option<i32> {
match self {
MemberRole::Viewer => Some(4),
MemberRole::Editor => Some(6),
MemberRole::Admin => Some(22),
MemberRole::Inherited => None,
}
}
pub fn from_permissions(permissions: Option<i32>) -> Self {
match permissions {
None => MemberRole::Inherited,
Some(4) => MemberRole::Viewer,
Some(6) => MemberRole::Editor,
Some(22) => MemberRole::Admin,
Some(_) => MemberRole::Viewer,
}
}
}
#[derive(Debug, Clone)]
pub struct ShareMember {
pub share_id: ShareId,
pub membership_id: ShareMembershipId,
pub email: String,
pub added_by_email: String,
pub role: MemberRole,
pub invitation_time: i64,
}
#[derive(Debug, Clone)]
pub struct PublicLink {
pub share_id: ShareId,
pub public_link_id: String,
pub url: Option<String>,
pub role: MemberRole,
pub creation_time: i64,
pub expiration_time: Option<i64>,
pub has_custom_password: bool,
}
#[derive(Debug, Clone)]
pub struct ShareInvitation {
pub share_id: ShareId,
pub invitation_id: String,
pub invitee_email: String,
pub inviter_email: String,
pub role: MemberRole,
pub invitation_time: i64,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum ExternalInvitationState {
Pending,
UserRegistered,
}
impl ExternalInvitationState {
pub fn from_raw(state: i32) -> Self {
match state {
1 => Self::Pending,
_ => Self::UserRegistered,
}
}
}
#[derive(Debug, Clone)]
pub struct ExternalInvitation {
pub share_id: ShareId,
pub invitation_id: String,
pub invitee_email: String,
pub inviter_email: String,
pub role: MemberRole,
pub invitation_time: i64,
pub state: ExternalInvitationState,
}
#[derive(Debug, Clone)]
pub struct IncomingInvitation {
pub invitation_id: String,
pub inviter_email: String,
pub invitee_email: String,
pub role: MemberRole,
pub invitation_time: i64,
pub node_uid: NodeUid,
pub node_name: Option<String>,
pub is_folder: bool,
}
#[derive(Debug, Clone)]
pub struct Bookmark {
pub token: String,
pub url: String,
pub node_name: Option<String>,
pub is_folder: bool,
pub creation_time: i64,
}