proton_drive_rs/lib.rs
1//! High-level Proton Drive client (Rust port).
2//!
3//! Built on top of [`proton_sdk`]. Milestone 1 covers session-backed read
4//! operations: resolving the My Files folder, fetching node metadata and
5//! enumerating folder children.
6//!
7//! ```no_run
8//! # async fn run() -> proton_sdk::error::Result<()> {
9//! use proton_sdk::config::ProtonClientConfiguration;
10//! use proton_sdk::session::{PasswordMode, ProtonApiSession, ResumeParameters};
11//! use proton_drive_rs::ProtonDriveClient;
12//!
13//! let config = ProtonClientConfiguration::new("external-drive-myapp@0.1.0-alpha");
14//! let session = ProtonApiSession::resume(config, ResumeParameters {
15//! session_id: "uid".into(),
16//! username: "user@proton.me".into(),
17//! user_id: "user-id".into(),
18//! access_token: "access".into(),
19//! refresh_token: "refresh".into(),
20//! scopes: vec![],
21//! is_waiting_for_second_factor_code: false,
22//! password_mode: PasswordMode::Single,
23//! })?;
24//!
25//! let drive = ProtonDriveClient::new(&session, b"mailbox-password".to_vec());
26//! let root = drive.get_my_files_folder().await?;
27//! let child_uids = drive.enumerate_folder_children_node_uids(&root.uid).await?;
28//! for child in drive.enumerate_nodes(&child_uids).await? {
29//! println!("{} ({:?})", child.name, child.kind);
30//! }
31//! # Ok(())
32//! # }
33//! ```
34#![forbid(unsafe_code)]
35
36mod cache;
37mod client;
38mod crypto;
39mod devices;
40mod dtos;
41mod events;
42mod node;
43mod photos;
44mod sharing;
45
46pub use cache::{CachedNodeInfo, DriveEntityCache};
47pub use client::ProtonDriveClient;
48pub use devices::{Device, DeviceType};
49pub use events::{DriveEvent, DriveEventScopeId};
50pub use node::{Node, NodeKind, RevisionState, Thumbnail, ThumbnailType};
51pub use photos::{PhotoTag, PhotoUploadMetadata, PhotosTimelineItem, ProtonPhotosClient};
52pub use proton_sdk::account::KeySalt;
53pub use proton_sdk::cache::{CacheRepository, EncryptedCacheRepository, InMemoryCacheRepository};
54pub use sharing::{
55 Bookmark, ExternalInvitation, ExternalInvitationState, IncomingInvitation, MemberRole,
56 PublicLink, ShareInvitation, ShareMember,
57};
58
59pub use proton_sdk;