#![allow(dead_code)]
use serde::{Deserialize, Serialize};
use proton_sdk::ids::{
AddressId, AddressKeyId, DeviceUid, DriveEventId, LinkId, ShareId, ShareMembershipId, VolumeId,
};
#[derive(Debug, Deserialize)]
pub struct MyFilesShareResponse {
#[serde(rename = "Volume")]
pub volume: ShareVolumeDto,
#[serde(rename = "Share")]
pub share: ShareDto,
#[serde(rename = "Link")]
pub link: LinkDetailsDto,
}
#[derive(Debug, Deserialize)]
pub struct ShareVolumeDto {
#[serde(rename = "VolumeID")]
pub id: VolumeId,
}
#[derive(Debug, Deserialize)]
pub struct ShareDto {
#[serde(rename = "ShareID")]
pub id: ShareId,
#[serde(rename = "Key")]
pub key: String,
#[serde(rename = "Passphrase")]
pub passphrase: String,
#[serde(rename = "PassphraseSignature")]
pub passphrase_signature: Option<String>,
#[serde(rename = "AddressID")]
pub address_id: AddressId,
}
#[derive(Debug, Serialize)]
pub struct LinkDetailsRequest<'a> {
#[serde(rename = "LinkIDs")]
pub link_ids: &'a [LinkId],
}
#[derive(Debug, Deserialize)]
pub struct LinkDetailsResponse {
#[serde(rename = "Links")]
pub links: Vec<LinkDetailsDto>,
}
#[derive(Debug, Deserialize)]
pub struct TimelinePhotoListResponse {
#[serde(rename = "Photos")]
pub photos: Vec<TimelinePhotoDto>,
}
#[derive(Debug, Deserialize)]
pub struct TimelinePhotoDto {
#[serde(rename = "LinkID")]
pub id: LinkId,
#[serde(rename = "CaptureTime")]
pub capture_time: i64,
#[serde(rename = "Hash")]
pub name_hash: Option<String>,
#[serde(rename = "ContentHash")]
pub content_hash: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct VolumeTrashResponse {
#[serde(rename = "Trash")]
pub trash_by_share: Vec<ShareTrashDto>,
}
#[derive(Debug, Deserialize)]
pub struct ShareTrashDto {
#[serde(rename = "ShareID")]
pub share_id: ShareId,
#[serde(rename = "LinkIDs")]
pub link_ids: Vec<LinkId>,
#[serde(rename = "ParentIDs", default)]
pub parent_ids: Vec<LinkId>,
}
#[derive(Debug, Deserialize)]
pub struct LinkDetailsDto {
#[serde(rename = "Link")]
pub link: LinkDto,
#[serde(rename = "Folder")]
pub folder: Option<FolderDto>,
#[serde(rename = "File")]
pub file: Option<FileDto>,
#[serde(rename = "Photo")]
pub photo: Option<FileDto>,
#[serde(rename = "Sharing", default)]
pub sharing: Option<LinkSharingDto>,
#[serde(rename = "Membership", default)]
pub membership: Option<ShareMembershipSummaryDto>,
}
#[derive(Debug, Deserialize)]
pub struct LinkSharingDto {
#[serde(rename = "ShareID")]
pub share_id: ShareId,
#[serde(rename = "ShareURLID", default)]
pub share_url_id: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct ShareMembershipSummaryDto {
#[serde(rename = "ShareID")]
pub share_id: ShareId,
#[serde(rename = "MembershipID")]
pub membership_id: ShareMembershipId,
#[serde(rename = "Permissions", default)]
pub permissions: i32,
}
impl LinkDetailsDto {
pub fn file_properties(&self) -> Option<&FileDto> {
self.file.as_ref().or(self.photo.as_ref())
}
}
#[derive(Debug, Deserialize)]
pub struct LinkDto {
#[serde(rename = "LinkID")]
pub id: LinkId,
#[serde(rename = "Type")]
pub link_type: i32,
#[serde(rename = "ParentLinkID")]
pub parent_id: Option<LinkId>,
#[serde(rename = "State")]
pub state: i32,
#[serde(rename = "CreateTime")]
pub creation_time: i64,
#[serde(rename = "ModifyTime")]
pub modification_time: i64,
#[serde(rename = "Trashed")]
pub trash_time: Option<i64>,
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "NameHash", default)]
pub name_hash: Option<String>,
#[serde(rename = "NodeKey")]
pub key: String,
#[serde(rename = "NodePassphrase")]
pub passphrase: String,
#[serde(rename = "NodePassphraseSignature")]
pub passphrase_signature: Option<String>,
#[serde(rename = "SignatureEmail")]
pub signature_email: Option<String>,
#[serde(rename = "NameSignatureEmail")]
pub name_signature_email: Option<String>,
}
impl LinkDto {
pub fn parsed_type(&self) -> LinkType {
LinkType::from_raw(self.link_type)
}
pub fn is_trashed(&self) -> bool {
self.state == LinkState::Trashed as i32 || self.trash_time.is_some()
}
}
#[derive(Debug, Deserialize)]
pub struct FolderDto {
#[serde(rename = "NodeHashKey")]
pub hash_key: String,
#[serde(rename = "XAttr")]
pub extended_attributes: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct FileDto {
#[serde(rename = "MediaType")]
pub media_type: String,
#[serde(rename = "TotalEncryptedSize")]
pub total_size_on_storage: i64,
#[serde(rename = "ContentKeyPacket")]
pub content_key_packet: Option<String>,
#[serde(rename = "ContentKeyPacketSignature")]
pub content_key_signature: Option<String>,
#[serde(rename = "ActiveRevision")]
pub active_revision: Option<ActiveRevisionDto>,
}
#[derive(Debug, Deserialize)]
pub struct ActiveRevisionDto {
#[serde(rename = "RevisionID")]
pub id: String,
#[serde(rename = "CreateTime")]
pub creation_time: i64,
#[serde(rename = "State", default)]
pub state: Option<i32>,
#[serde(rename = "EncryptedSize")]
pub encrypted_size: i64,
#[serde(rename = "SignatureEmail", default)]
pub signature_email: Option<String>,
#[serde(rename = "XAttr")]
pub extended_attributes: Option<String>,
}
#[derive(Debug, Default, Deserialize)]
pub struct DecryptedExtendedAttributes {
#[serde(rename = "Common", default)]
pub common: Option<DecryptedCommonExtendedAttributes>,
}
#[derive(Debug, Default, Deserialize)]
pub struct DecryptedCommonExtendedAttributes {
#[serde(rename = "Size", default)]
pub size: Option<i64>,
#[serde(rename = "ModificationTime", default)]
pub modification_time: Option<String>,
#[serde(rename = "BlockSizes", default)]
pub block_sizes: Option<Vec<i64>>,
#[serde(rename = "Digests", default)]
pub digests: Option<DecryptedFileContentDigests>,
}
#[derive(Debug, Default, Deserialize)]
pub struct DecryptedFileContentDigests {
#[serde(rename = "SHA1", default)]
pub sha1: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct RevisionResponse {
#[serde(rename = "Revision")]
pub revision: RevisionDto,
}
#[derive(Debug, Deserialize)]
pub struct RevisionDto {
#[serde(rename = "ID")]
pub id: String,
#[serde(rename = "ManifestSignature")]
pub manifest_signature: Option<String>,
#[serde(rename = "SignatureEmail")]
pub signature_email: Option<String>,
#[serde(rename = "XAttr")]
pub extended_attributes: Option<String>,
#[serde(rename = "Thumbnails", default)]
pub thumbnails: Vec<ThumbnailDto>,
#[serde(rename = "Blocks", default)]
pub blocks: Vec<BlockDto>,
}
#[derive(Debug, Deserialize)]
pub struct BlockDto {
#[serde(rename = "Index")]
pub index: i32,
#[serde(rename = "BareURL")]
pub bare_url: String,
#[serde(rename = "Token")]
pub token: String,
}
#[derive(Debug, Deserialize)]
pub struct ThumbnailDto {
#[serde(rename = "ThumbnailID")]
pub id: Option<String>,
#[serde(rename = "Type")]
pub thumbnail_type: i32,
#[serde(rename = "Hash")]
pub hash_digest: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct ThumbnailBlockListRequest {
#[serde(rename = "ThumbnailIDs")]
pub thumbnail_ids: Vec<String>,
}
#[derive(Debug, Deserialize)]
pub struct ThumbnailBlockListResponse {
#[serde(rename = "Thumbnails", default)]
pub blocks: Vec<ThumbnailBlock>,
#[serde(rename = "Errors", default)]
pub errors: Vec<ThumbnailBlockError>,
}
#[derive(Debug, Deserialize)]
pub struct ThumbnailBlock {
#[serde(rename = "ThumbnailID")]
pub thumbnail_id: String,
#[serde(rename = "BareURL")]
pub bare_url: String,
#[serde(rename = "Token")]
pub token: String,
}
#[derive(Debug, Deserialize)]
pub struct ThumbnailBlockError {
#[serde(rename = "ThumbnailID")]
pub thumbnail_id: String,
#[serde(rename = "Error")]
pub error: String,
#[serde(rename = "Code", default)]
pub code: i32,
}
#[derive(Debug, Deserialize)]
pub struct FolderChildrenResponse {
#[serde(rename = "LinkIDs")]
pub link_ids: Vec<LinkId>,
#[serde(rename = "AnchorID")]
pub anchor_id: Option<LinkId>,
#[serde(rename = "More")]
pub more_results_exist: bool,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LinkType {
Folder,
File,
Album,
Unknown,
}
impl LinkType {
fn from_raw(raw: i32) -> Self {
match raw {
1 => Self::Folder,
2 => Self::File,
3 => Self::Album,
_ => Self::Unknown,
}
}
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum LinkState {
Draft = 0,
Active = 1,
Trashed = 2,
Deleted = 3,
Restoring = 4,
}
#[derive(Debug, Serialize)]
pub struct FileCreationRequest {
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "Hash")]
pub name_hash: String,
#[serde(rename = "ParentLinkID")]
pub parent_link_id: LinkId,
#[serde(rename = "NodePassphrase")]
pub passphrase: String,
#[serde(rename = "NodePassphraseSignature")]
pub passphrase_signature: String,
#[serde(rename = "NodeKey")]
pub key: String,
#[serde(rename = "MIMEType")]
pub media_type: String,
#[serde(rename = "ContentKeyPacket")]
pub content_key_packet: String,
#[serde(rename = "ContentKeyPacketSignature")]
pub content_key_signature: String,
#[serde(rename = "SignatureAddress")]
pub signature_address: String,
#[serde(rename = "ClientUID", skip_serializing_if = "Option::is_none")]
pub client_uid: Option<String>,
#[serde(rename = "IntendedUploadSize")]
pub intended_upload_size: i64,
}
#[derive(Debug, Deserialize)]
pub struct FileCreationResponse {
#[serde(rename = "File")]
pub file: FileCreationIdentifiers,
}
#[derive(Debug, Deserialize)]
pub struct FileCreationIdentifiers {
#[serde(rename = "ID")]
pub link_id: LinkId,
#[serde(rename = "RevisionID")]
pub revision_id: String,
}
#[derive(Debug, Serialize)]
pub struct FolderCreationRequest {
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "Hash")]
pub name_hash: String,
#[serde(rename = "ParentLinkID")]
pub parent_link_id: LinkId,
#[serde(rename = "NodePassphrase")]
pub passphrase: String,
#[serde(rename = "NodePassphraseSignature")]
pub passphrase_signature: String,
#[serde(rename = "NodeKey")]
pub key: String,
#[serde(rename = "NodeHashKey")]
pub node_hash_key: String,
#[serde(rename = "SignatureEmail")]
pub signature_email: String,
#[serde(rename = "XAttr", skip_serializing_if = "Option::is_none")]
pub extended_attributes: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct VolumeCreationRequest {
#[serde(rename = "AddressID")]
pub address_id: AddressId,
#[serde(rename = "AddressKeyID")]
pub address_key_id: AddressKeyId,
#[serde(rename = "ShareKey")]
pub share_key: String,
#[serde(rename = "SharePassphrase")]
pub share_passphrase: String,
#[serde(rename = "SharePassphraseSignature")]
pub share_passphrase_signature: String,
#[serde(rename = "FolderName")]
pub folder_name: String,
#[serde(rename = "FolderKey")]
pub folder_key: String,
#[serde(rename = "FolderPassphrase")]
pub folder_passphrase: String,
#[serde(rename = "FolderPassphraseSignature")]
pub folder_passphrase_signature: String,
#[serde(rename = "FolderHashKey")]
pub folder_hash_key: String,
}
#[derive(Debug, Deserialize)]
pub struct FolderCreationResponse {
#[serde(rename = "Folder")]
pub folder: FolderCreationIdentifiers,
}
#[derive(Debug, Deserialize)]
pub struct FolderCreationIdentifiers {
#[serde(rename = "ID")]
pub link_id: LinkId,
}
#[derive(Debug, Serialize)]
pub struct RenameLinkRequest {
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "Hash")]
pub name_hash: String,
#[serde(rename = "NameSignatureEmail")]
pub name_signature_email: String,
#[serde(rename = "MIMEType")]
pub media_type: Option<String>,
#[serde(rename = "OriginalHash")]
pub original_hash: String,
}
#[derive(Debug, Serialize)]
pub struct MoveLinkRequest {
#[serde(rename = "ParentLinkID")]
pub parent_link_id: LinkId,
#[serde(rename = "NodePassphrase")]
pub passphrase: String,
#[serde(
rename = "NodePassphraseSignature",
skip_serializing_if = "Option::is_none"
)]
pub passphrase_signature: Option<String>,
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "NameSignatureEmail")]
pub name_signature_email: String,
#[serde(rename = "Hash")]
pub name_hash: String,
#[serde(rename = "OriginalHash")]
pub original_hash: String,
}
#[derive(Debug, Serialize)]
pub struct MoveMultipleLinksRequest {
#[serde(rename = "ParentLinkID")]
pub parent_link_id: LinkId,
#[serde(rename = "Links")]
pub links: Vec<MoveMultipleLinksItem>,
#[serde(rename = "NameSignatureEmail")]
pub name_signature_email: String,
#[serde(rename = "SignatureEmail", skip_serializing_if = "Option::is_none")]
pub signature_email: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct MoveMultipleLinksItem {
#[serde(rename = "LinkID")]
pub link_id: LinkId,
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "NodePassphrase")]
pub passphrase: String,
#[serde(rename = "Hash")]
pub name_hash: String,
#[serde(rename = "OriginalHash")]
pub original_hash: String,
#[serde(
rename = "NodePassphraseSignature",
skip_serializing_if = "Option::is_none"
)]
pub passphrase_signature: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct NodeNameAvailabilityRequest {
#[serde(rename = "Hashes")]
pub name_hashes: Vec<String>,
#[serde(rename = "ClientUID")]
pub client_uid: Vec<String>,
}
#[derive(Debug, Deserialize)]
pub struct NodeNameAvailabilityResponse {
#[serde(rename = "AvailableHashes", default)]
pub available_hashes: Vec<String>,
#[serde(rename = "PendingHashes", default)]
pub unavailable_hashes: Vec<NameHashUnavailabilityDto>,
}
#[derive(Debug, Deserialize)]
pub struct NameHashUnavailabilityDto {
#[serde(rename = "Hash")]
pub name_hash: String,
#[serde(rename = "LinkID")]
pub link_id: LinkId,
#[serde(rename = "ClientUID")]
pub client_uid: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct MultipleLinksRequest<'a> {
#[serde(rename = "LinkIDs")]
pub link_ids: &'a [LinkId],
}
#[derive(Debug, Deserialize)]
pub struct AggregateLinksResponse {
#[serde(rename = "Responses", default)]
pub responses: Vec<LinkIdResponsePair>,
}
#[derive(Debug, Deserialize)]
pub struct LinkIdResponsePair {
#[serde(rename = "LinkID")]
pub link_id: LinkId,
#[serde(rename = "Response")]
pub response: proton_sdk::api::ApiResponse,
}
#[derive(Debug, Serialize)]
pub struct RevisionCreationRequest {
#[serde(rename = "CurrentRevisionID")]
pub current_revision_id: String,
#[serde(rename = "ClientUID", skip_serializing_if = "Option::is_none")]
pub client_uid: Option<String>,
#[serde(rename = "IntendedUploadSize")]
pub intended_upload_size: i64,
}
#[derive(Debug, Deserialize)]
pub struct RevisionCreationResponse {
#[serde(rename = "Revision")]
pub revision: RevisionCreationIdentity,
}
#[derive(Debug, Deserialize)]
pub struct RevisionCreationIdentity {
#[serde(rename = "ID")]
pub revision_id: String,
}
#[derive(Debug, Deserialize)]
pub struct BlockVerificationInputResponse {
#[serde(rename = "VerificationCode")]
pub verification_code: String,
#[serde(rename = "ContentKeyPacket")]
pub content_key_packet: String,
}
#[derive(Debug, Serialize)]
pub struct BlockUploadPreparationRequest {
#[serde(rename = "AddressID")]
pub address_id: AddressId,
#[serde(rename = "VolumeID")]
pub volume_id: VolumeId,
#[serde(rename = "LinkID")]
pub link_id: LinkId,
#[serde(rename = "RevisionID")]
pub revision_id: String,
#[serde(rename = "BlockList")]
pub blocks: Vec<BlockCreationRequest>,
#[serde(rename = "ThumbnailList")]
pub thumbnails: Vec<ThumbnailCreationRequest>,
}
#[derive(Debug, Serialize)]
pub struct BlockCreationRequest {
#[serde(rename = "Index")]
pub index: i32,
#[serde(rename = "Size")]
pub size: i32,
#[serde(rename = "EncSignature")]
pub encrypted_signature: String,
#[serde(rename = "Hash")]
pub hash: String,
#[serde(rename = "Verifier")]
pub verifier: BlockVerifier,
}
#[derive(Debug, Serialize)]
pub struct BlockVerifier {
#[serde(rename = "Token")]
pub token: String,
}
#[derive(Debug, Serialize)]
pub struct ThumbnailCreationRequest {
#[serde(rename = "Size")]
pub size: i32,
#[serde(rename = "Type")]
pub thumbnail_type: i32,
#[serde(rename = "Hash")]
pub hash: String,
}
#[derive(Debug, Deserialize)]
pub struct BlockUploadPreparationResponse {
#[serde(rename = "UploadLinks")]
pub upload_targets: Vec<BlockUploadTarget>,
#[serde(rename = "ThumbnailLinks", default)]
pub thumbnail_upload_targets: Vec<BlockUploadTarget>,
}
#[derive(Debug, Deserialize)]
pub struct BlockUploadTarget {
#[serde(rename = "BareURL")]
pub bare_url: String,
#[serde(rename = "Token")]
pub token: String,
}
#[derive(Debug, Serialize)]
pub struct RevisionUpdateRequest {
#[serde(rename = "ManifestSignature")]
pub manifest_signature: String,
#[serde(rename = "SignatureAddress")]
pub signature_address: String,
#[serde(rename = "ChecksumVerified")]
pub checksum_verified: bool,
#[serde(rename = "XAttr", skip_serializing_if = "Option::is_none")]
pub extended_attributes: Option<String>,
#[serde(rename = "Photo", skip_serializing_if = "Option::is_none")]
pub photos_attributes: Option<PhotosAttributesDto>,
}
#[derive(Debug, Serialize)]
pub struct PhotosAttributesDto {
#[serde(rename = "CaptureTime")]
pub capture_time: i64,
#[serde(rename = "ContentHash")]
pub content_hash: String,
#[serde(rename = "MainPhotoLinkID", skip_serializing_if = "Option::is_none")]
pub main_photo_link_id: Option<LinkId>,
#[serde(rename = "Tags")]
pub tags: Vec<i32>,
}
#[derive(Debug, Serialize)]
pub struct ExtendedAttributes {
#[serde(rename = "Common")]
pub common: CommonExtendedAttributes,
}
#[derive(Debug, Serialize)]
pub struct CommonExtendedAttributes {
#[serde(rename = "Size", skip_serializing_if = "Option::is_none")]
pub size: Option<i64>,
#[serde(rename = "ModificationTime", skip_serializing_if = "Option::is_none")]
pub modification_time: Option<String>,
#[serde(rename = "BlockSizes", skip_serializing_if = "Option::is_none")]
pub block_sizes: Option<Vec<i32>>,
#[serde(rename = "Digests", skip_serializing_if = "Option::is_none")]
pub digests: Option<FileContentDigests>,
}
#[derive(Debug, Serialize)]
pub struct FileContentDigests {
#[serde(rename = "SHA1")]
pub sha1: String,
}
#[derive(Debug, Deserialize)]
pub struct LatestVolumeEventResponse {
#[serde(rename = "EventID")]
pub event_id: DriveEventId,
}
#[derive(Debug, Deserialize)]
pub struct VolumeEventListResponse {
#[serde(rename = "EventID")]
pub last_event_id: DriveEventId,
#[serde(rename = "Events", default)]
pub events: Vec<VolumeEventDto>,
#[serde(rename = "More")]
pub more_entries_exist: bool,
#[serde(rename = "Refresh")]
pub refresh_required: bool,
}
#[derive(Debug, Deserialize)]
pub struct VolumeEventDto {
#[serde(rename = "EventID")]
pub id: DriveEventId,
#[serde(rename = "EventType")]
pub event_type: i32,
#[serde(rename = "Link")]
pub link: VolumeEventLinkDto,
}
#[derive(Debug, Deserialize)]
pub struct VolumeEventLinkDto {
#[serde(rename = "LinkID")]
pub id: LinkId,
#[serde(rename = "ParentLinkID")]
pub parent_id: Option<LinkId>,
#[serde(rename = "IsShared", default)]
pub is_shared: bool,
#[serde(rename = "IsTrashed", default)]
pub is_trashed: bool,
}
#[derive(Debug, Deserialize)]
pub struct ShareResponse {
#[serde(flatten)]
pub share: ShareDto,
#[serde(rename = "VolumeID")]
pub volume_id: VolumeId,
#[serde(rename = "LinkID")]
pub root_link_id: LinkId,
}
#[derive(Debug, Deserialize)]
pub struct SharedWithMeResponse {
#[serde(rename = "Links", default)]
pub links: Vec<SharedWithMeLinkDto>,
#[serde(rename = "AnchorID", default)]
pub anchor_id: Option<String>,
#[serde(rename = "More", default)]
pub more: bool,
}
#[derive(Debug, Deserialize)]
pub struct SharedWithMeLinkDto {
#[serde(rename = "VolumeID")]
pub volume_id: VolumeId,
#[serde(rename = "ShareID")]
pub share_id: ShareId,
#[serde(rename = "LinkID")]
pub link_id: LinkId,
#[serde(rename = "ShareTargetType", default)]
pub share_target_type: i32,
}
#[derive(Debug, Deserialize)]
pub struct SharedByMeResponse {
#[serde(rename = "Links", default)]
pub links: Vec<SharedByMeLinkDto>,
#[serde(rename = "AnchorID", default)]
pub anchor_id: Option<String>,
#[serde(rename = "More", default)]
pub more: bool,
}
#[derive(Debug, Deserialize)]
pub struct SharedByMeLinkDto {
#[serde(rename = "ShareID")]
pub share_id: ShareId,
#[serde(rename = "LinkID")]
pub link_id: LinkId,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
#[repr(i32)]
pub enum ShareTargetType {
Root = 0,
Folder = 1,
File = 2,
Album = 3,
Photo = 4,
ProtonVendor = 5,
}
impl ShareTargetType {
pub fn from_raw(value: i32) -> Option<Self> {
match value {
0 => Some(Self::Root),
1 => Some(Self::Folder),
2 => Some(Self::File),
3 => Some(Self::Album),
4 => Some(Self::Photo),
5 => Some(Self::ProtonVendor),
_ => None,
}
}
pub fn is_drive_item(self) -> bool {
matches!(self, Self::Folder | Self::File | Self::ProtonVendor)
}
}
#[derive(Debug, Deserialize)]
pub struct DeviceListResponse {
#[serde(rename = "Devices", default)]
pub devices: Vec<DeviceListItemDto>,
}
#[derive(Debug, Deserialize)]
pub struct DeviceListItemDto {
#[serde(rename = "Device")]
pub device: DeviceDataDto,
#[serde(rename = "Share")]
pub share: DeviceShareDataDto,
}
#[derive(Debug, Deserialize)]
pub struct DeviceDataDto {
#[serde(rename = "DeviceID")]
pub id: DeviceUid,
#[serde(rename = "VolumeID")]
pub volume_id: VolumeId,
#[serde(rename = "Type")]
pub device_type: i32,
#[serde(rename = "CreateTime")]
pub creation_time: i64,
#[serde(rename = "LastSyncTime", default)]
pub last_sync_time: Option<i64>,
}
#[derive(Debug, Deserialize)]
pub struct DeviceShareDataDto {
#[serde(rename = "ShareID")]
pub id: ShareId,
#[serde(rename = "LinkID")]
pub root_link_id: LinkId,
#[serde(rename = "Name", default)]
pub name: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct DeviceCreationRequest {
#[serde(rename = "Device")]
pub device: DeviceCreationDeviceDto,
#[serde(rename = "Share")]
pub share: DeviceCreationShareDto,
#[serde(rename = "Link")]
pub link: DeviceCreationLinkDto,
}
#[derive(Debug, Serialize)]
pub struct DeviceCreationDeviceDto {
#[serde(rename = "Type")]
pub device_type: i32,
#[serde(rename = "SyncState")]
pub sync_state: i32,
}
#[derive(Debug, Serialize)]
pub struct DeviceCreationShareDto {
#[serde(rename = "AddressID")]
pub address_id: AddressId,
#[serde(rename = "AddressKeyID")]
pub address_key_id: AddressKeyId,
#[serde(rename = "Key")]
pub key: String,
#[serde(rename = "Passphrase")]
pub passphrase: String,
#[serde(rename = "PassphraseSignature")]
pub passphrase_signature: String,
}
#[derive(Debug, Serialize)]
pub struct DeviceCreationLinkDto {
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "NodeKey")]
pub key: String,
#[serde(rename = "NodePassphrase")]
pub passphrase: String,
#[serde(rename = "NodePassphraseSignature")]
pub passphrase_signature: String,
#[serde(rename = "NodeHashKey")]
pub node_hash_key: String,
}
#[derive(Debug, Deserialize)]
pub struct DeviceCreationResponse {
#[serde(rename = "Device")]
pub device: DeviceCreationResultDto,
}
#[derive(Debug, Deserialize)]
pub struct DeviceCreationResultDto {
#[serde(rename = "DeviceID")]
pub id: DeviceUid,
#[serde(rename = "ShareID")]
pub share_id: ShareId,
#[serde(rename = "LinkID")]
pub root_link_id: LinkId,
}
#[derive(Debug, Serialize)]
pub struct DeviceUpdateRequest {
#[serde(rename = "Share")]
pub share: DeviceUpdateShareDto,
}
#[derive(Debug, Serialize)]
pub struct DeviceUpdateShareDto {
#[serde(rename = "Name")]
pub name: String,
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn only_drive_share_targets_are_drive_items() {
for (raw, expected) in [
(0, false),
(1, true),
(2, true),
(3, false),
(4, false),
(5, true),
] {
let kind = ShareTargetType::from_raw(raw).expect("known target type");
assert_eq!(kind.is_drive_item(), expected, "target type {raw}");
}
assert!(ShareTargetType::from_raw(6).is_none());
}
}
#[derive(Debug, Serialize)]
pub struct CreateShareRequest {
#[serde(rename = "RootLinkID")]
pub root_link_id: LinkId,
#[serde(rename = "AddressID")]
pub address_id: AddressId,
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "ShareKey")]
pub share_key: String,
#[serde(rename = "SharePassphrase")]
pub share_passphrase: String,
#[serde(rename = "SharePassphraseSignature")]
pub share_passphrase_signature: String,
#[serde(rename = "PassphraseKeyPacket")]
pub passphrase_key_packet: String,
#[serde(rename = "NameKeyPacket")]
pub name_key_packet: String,
}
#[derive(Debug, Deserialize)]
pub struct CreateShareResponse {
#[serde(rename = "Share")]
pub share: CreatedShareDto,
}
#[derive(Debug, Deserialize)]
pub struct CreatedShareDto {
#[serde(rename = "ID")]
pub id: ShareId,
#[serde(rename = "EditorsCanShare", default)]
pub editors_can_share: bool,
}
#[derive(Debug, Serialize)]
pub struct InviteProtonUserRequest {
#[serde(rename = "Invitation")]
pub invitation: InviteProtonUserInvitationDto,
#[serde(rename = "EmailDetails")]
pub email_details: InviteEmailDetailsDto,
}
#[derive(Debug, Serialize)]
pub struct InviteProtonUserInvitationDto {
#[serde(rename = "InviterEmail")]
pub inviter_email: String,
#[serde(rename = "InviteeEmail")]
pub invitee_email: String,
#[serde(rename = "Permissions")]
pub permissions: i32,
#[serde(rename = "KeyPacket")]
pub key_packet: String,
#[serde(rename = "KeyPacketSignature")]
pub key_packet_signature: String,
#[serde(
rename = "ExternalInvitationID",
skip_serializing_if = "Option::is_none"
)]
pub external_invitation_id: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct InviteEmailDetailsDto {
#[serde(rename = "Message", skip_serializing_if = "Option::is_none")]
pub message: Option<String>,
#[serde(rename = "ItemName", skip_serializing_if = "Option::is_none")]
pub item_name: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct InviteProtonUserResponse {
#[serde(rename = "Invitation")]
pub invitation: ShareInvitationDto,
}
#[derive(Debug, Deserialize)]
pub struct ShareInvitationsResponse {
#[serde(rename = "Invitations", default)]
pub invitations: Vec<ShareInvitationDto>,
}
#[derive(Debug, Deserialize)]
pub struct ShareInvitationDto {
#[serde(rename = "InvitationID")]
pub invitation_id: String,
#[serde(rename = "InviterEmail")]
pub inviter_email: String,
#[serde(rename = "InviteeEmail")]
pub invitee_email: String,
#[serde(rename = "Permissions", default)]
pub permissions: Option<i32>,
#[serde(rename = "CreateTime", default)]
pub create_time: i64,
}
#[derive(Debug, Deserialize)]
pub struct ShareMembersResponse {
#[serde(rename = "Members", default)]
pub members: Vec<ShareMemberDto>,
}
#[derive(Debug, Deserialize)]
pub struct ShareMemberDto {
#[serde(rename = "MemberID")]
pub member_id: ShareMembershipId,
#[serde(rename = "InviterEmail")]
pub inviter_email: String,
#[serde(rename = "Email")]
pub email: String,
#[serde(rename = "Permissions", default)]
pub permissions: Option<i32>,
#[serde(rename = "CreateTime", default)]
pub create_time: i64,
}
#[derive(Debug, Serialize)]
pub struct UpdatePermissionsRequest {
#[serde(rename = "Permissions")]
pub permissions: i32,
}
#[derive(Debug, Deserialize)]
pub struct InvitationsListResponse {
#[serde(rename = "Invitations", default)]
pub invitations: Vec<InvitationListItemDto>,
#[serde(rename = "More", default)]
pub more: bool,
#[serde(rename = "AnchorID", default)]
pub anchor_id: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct InvitationListItemDto {
#[serde(rename = "InvitationID")]
pub invitation_id: String,
#[serde(rename = "ShareID", default)]
pub share_id: String,
#[serde(rename = "ShareTargetType", default)]
pub share_target_type: i32,
}
#[derive(Debug, Deserialize)]
pub struct InvitationDetailsResponse {
#[serde(rename = "Invitation")]
pub invitation: IncomingInvitationDto,
#[serde(rename = "Share")]
pub share: InvitationShareDto,
#[serde(rename = "Link")]
pub link: InvitationLinkDto,
}
#[derive(Debug, Deserialize)]
pub struct IncomingInvitationDto {
#[serde(rename = "InvitationID")]
pub invitation_id: String,
#[serde(rename = "InviterEmail")]
pub inviter_email: String,
#[serde(rename = "InviteeEmail")]
pub invitee_email: String,
#[serde(rename = "KeyPacket")]
pub key_packet: String,
#[serde(rename = "KeyPacketSignature", default)]
pub key_packet_signature: String,
#[serde(rename = "Permissions", default)]
pub permissions: Option<i32>,
#[serde(rename = "CreateTime", default)]
pub create_time: i64,
}
#[derive(Debug, Deserialize)]
pub struct InvitationShareDto {
#[serde(rename = "ShareKey")]
pub share_key: String,
#[serde(rename = "Passphrase")]
pub passphrase: String,
#[serde(rename = "CreatorEmail", default)]
pub creator_email: String,
#[serde(rename = "VolumeID")]
pub volume_id: String,
#[serde(rename = "ShareTargetType", default)]
pub share_target_type: i32,
}
#[derive(Debug, Deserialize)]
pub struct InvitationLinkDto {
#[serde(rename = "LinkID")]
pub link_id: String,
#[serde(rename = "Type", default)]
pub link_type: i32,
#[serde(rename = "MIMEType", default)]
pub mime_type: Option<String>,
#[serde(rename = "Name")]
pub name: String,
}
#[derive(Debug, Serialize)]
pub struct AcceptInvitationRequest {
#[serde(rename = "SessionKeySignature")]
pub session_key_signature: String,
}
#[derive(Debug, Serialize)]
pub struct InviteExternalUserRequest {
#[serde(rename = "ExternalInvitation")]
pub external_invitation: ExternalInvitationDto,
#[serde(rename = "EmailDetails")]
pub email_details: InviteEmailDetailsDto,
}
#[derive(Debug, Serialize)]
pub struct ExternalInvitationDto {
#[serde(rename = "InviterAddressID")]
pub inviter_address_id: AddressId,
#[serde(rename = "InviteeEmail")]
pub invitee_email: String,
#[serde(rename = "Permissions")]
pub permissions: i32,
#[serde(rename = "ExternalInvitationSignature")]
pub external_invitation_signature: String,
}
#[derive(Debug, Deserialize)]
pub struct InviteExternalUserResponse {
#[serde(rename = "ExternalInvitation")]
pub external_invitation: ExternalInvitationResponseDto,
}
#[derive(Debug, Deserialize)]
pub struct ExternalInvitationsResponse {
#[serde(rename = "ExternalInvitations", default)]
pub external_invitations: Vec<ExternalInvitationResponseDto>,
}
#[derive(Debug, Deserialize)]
pub struct ExternalInvitationResponseDto {
#[serde(rename = "ExternalInvitationID")]
pub external_invitation_id: String,
#[serde(rename = "InviterEmail")]
pub inviter_email: String,
#[serde(rename = "InviteeEmail")]
pub invitee_email: String,
#[serde(rename = "Permissions", default)]
pub permissions: Option<i32>,
#[serde(rename = "CreateTime", default)]
pub create_time: i64,
#[serde(rename = "State", default)]
pub state: i32,
}
#[derive(Debug, Deserialize)]
pub struct BookmarksResponse {
#[serde(rename = "Bookmarks", default)]
pub bookmarks: Vec<BookmarkDto>,
}
#[derive(Debug, Deserialize)]
pub struct BookmarkDto {
#[serde(rename = "Token")]
pub token: BookmarkTokenDto,
#[serde(rename = "CreateTime", default)]
pub create_time: i64,
#[serde(rename = "EncryptedUrlPassword", default)]
pub encrypted_url_password: Option<String>,
}
#[derive(Debug, Deserialize)]
pub struct BookmarkTokenDto {
#[serde(rename = "Token")]
pub token: String,
#[serde(rename = "ShareKey")]
pub share_key: String,
#[serde(rename = "SharePassphrase")]
pub share_passphrase: String,
#[serde(rename = "SharePasswordSalt")]
pub share_password_salt: String,
#[serde(rename = "LinkType", default)]
pub link_type: i32,
#[serde(rename = "MIMEType", default)]
pub mime_type: Option<String>,
#[serde(rename = "Name")]
pub name: String,
#[serde(rename = "NodeKey", default)]
pub node_key: String,
#[serde(rename = "NodePassphrase", default)]
pub node_passphrase: String,
#[serde(rename = "ContentKeyPacket", default)]
pub content_key_packet: Option<String>,
}
#[derive(Debug, Serialize)]
pub struct CreateBookmarkRequest {
#[serde(rename = "BookmarkShareURL")]
pub bookmark_share_url: BookmarkShareUrlDto,
}
#[derive(Debug, Serialize)]
pub struct BookmarkShareUrlDto {
#[serde(rename = "EncryptedUrlPassword")]
pub encrypted_url_password: String,
#[serde(rename = "AddressID")]
pub address_id: AddressId,
#[serde(rename = "AddressKeyID")]
pub address_key_id: AddressKeyId,
}
#[derive(Debug, Deserialize)]
pub struct ModulusResponse {
#[serde(rename = "Modulus")]
pub modulus: String,
#[serde(rename = "ModulusID")]
pub modulus_id: String,
}
#[derive(Debug, Serialize)]
pub struct CreatePublicLinkRequest {
#[serde(rename = "CreatorEmail")]
pub creator_email: String,
#[serde(rename = "Permissions")]
pub permissions: i32,
#[serde(rename = "Flags")]
pub flags: i32,
#[serde(rename = "ExpirationTime", skip_serializing_if = "Option::is_none")]
pub expiration_time: Option<i64>,
#[serde(rename = "SharePasswordSalt")]
pub share_password_salt: String,
#[serde(rename = "SharePassphraseKeyPacket")]
pub share_passphrase_key_packet: String,
#[serde(rename = "Password")]
pub password: String,
#[serde(rename = "UrlPasswordSalt")]
pub url_password_salt: String,
#[serde(rename = "SRPVerifier")]
pub srp_verifier: String,
#[serde(rename = "SRPModulusID")]
pub srp_modulus_id: String,
#[serde(rename = "MaxAccesses")]
pub max_accesses: i32,
}
#[derive(Debug, Deserialize)]
pub struct CreatePublicLinkResponse {
#[serde(rename = "ShareURL")]
pub share_url: ShareUrlDto,
}
#[derive(Debug, Deserialize)]
pub struct ShareUrlsResponse {
#[serde(rename = "ShareURLs", default)]
pub share_urls: Vec<ShareUrlDto>,
}
#[derive(Debug, Deserialize)]
pub struct ShareUrlDto {
#[serde(rename = "ShareURLID")]
pub share_url_id: String,
#[serde(rename = "ShareID", default)]
pub share_id: Option<ShareId>,
#[serde(rename = "PublicUrl", default)]
pub public_url: String,
#[serde(rename = "Password", default)]
pub password: Option<String>,
#[serde(rename = "CreateTime", default)]
pub create_time: i64,
#[serde(rename = "ExpirationTime", default)]
pub expiration_time: Option<i64>,
#[serde(rename = "Permissions", default)]
pub permissions: Option<i32>,
#[serde(rename = "Flags", default)]
pub flags: i32,
#[serde(rename = "NumAccesses", default)]
pub num_accesses: i64,
}