use proton_sdk::ids::{DriveEventId, NodeUid, VolumeId};
use std::fmt;
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct DriveEventScopeId(VolumeId);
impl DriveEventScopeId {
pub fn new(volume_id: VolumeId) -> Self {
Self(volume_id)
}
pub fn volume_id(&self) -> &VolumeId {
&self.0
}
}
impl fmt::Display for DriveEventScopeId {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
self.0.fmt(f)
}
}
#[derive(Debug, Clone)]
pub enum DriveEvent {
NodeUpdated {
id: DriveEventId,
node_uid: NodeUid,
parent_node_uid: Option<NodeUid>,
is_trashed: bool,
is_shared: bool,
},
NodeDeleted {
id: DriveEventId,
node_uid: NodeUid,
parent_node_uid: Option<NodeUid>,
},
CursorAdvanced { id: DriveEventId },
ContinuityLost { id: DriveEventId },
ScopeAccessLost { id: DriveEventId },
SharedWithMeUpdated { id: DriveEventId },
}
impl DriveEvent {
pub fn id(&self) -> &DriveEventId {
match self {
DriveEvent::NodeUpdated { id, .. }
| DriveEvent::NodeDeleted { id, .. }
| DriveEvent::CursorAdvanced { id }
| DriveEvent::ContinuityLost { id }
| DriveEvent::ScopeAccessLost { id }
| DriveEvent::SharedWithMeUpdated { id } => id,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn scope_id_wraps_volume() {
let vol = VolumeId::new("vol-1");
let scope = DriveEventScopeId::new(vol.clone());
assert_eq!(scope.volume_id(), &vol);
assert_eq!(scope.to_string(), vol.to_string());
}
#[test]
fn id_covers_parity_variants() {
let id = DriveEventId::new("evt-1");
assert_eq!(DriveEvent::ScopeAccessLost { id: id.clone() }.id(), &id);
assert_eq!(DriveEvent::SharedWithMeUpdated { id: id.clone() }.id(), &id);
}
}