1use windows::Win32::Foundation::{self, NTSTATUS};
2
3pub type CResult<T> = std::result::Result<T, CloudErrorKind>;
5
6#[derive(Debug, Clone, Copy)]
8pub enum CloudErrorKind {
9 AccessDenied,
11 AlreadyConnected,
13 AuthenticationFailed,
15 ConnectedProviderOnly,
17 DehydrationDisallowed,
19 IncompatibleHardlinks,
21 InsufficientResources,
23 InvalidRequest,
25 InUse,
27 MetadataCorrupt,
29 MetadataTooLarge,
31 NetworkUnavailable,
33 NotInSync,
35 NotSupported,
37 NotUnderSyncRoot,
39 Pinned,
41 PropertyBlobChecksumMismatch,
44 PropertyBlobTooLarge,
46 PropertyCorrupt,
48 PropertyLockConflict,
50 PropertyVersionNotSupported,
52 ProviderNotRunning,
54 ProviderTerminated,
56 ReadOnlyVolume,
58 RequestAborted,
60 RequestCancelled,
62 RequestTimeout,
64 SyncRootMetadataCorrupt,
66 TooManyPropertyBlobs,
68 Unsuccessful,
70 ValidationFailed,
72}
73
74impl From<CloudErrorKind> for NTSTATUS {
75 fn from(error: CloudErrorKind) -> Self {
76 match error {
77 CloudErrorKind::AccessDenied => Foundation::STATUS_CLOUD_FILE_ACCESS_DENIED,
78 CloudErrorKind::AlreadyConnected => Foundation::STATUS_CLOUD_FILE_ALREADY_CONNECTED,
79 CloudErrorKind::AuthenticationFailed => {
80 Foundation::STATUS_CLOUD_FILE_AUTHENTICATION_FAILED
81 }
82 CloudErrorKind::ConnectedProviderOnly => {
83 Foundation::STATUS_CLOUD_FILE_CONNECTED_PROVIDER_ONLY
84 }
85 CloudErrorKind::DehydrationDisallowed => {
86 Foundation::STATUS_CLOUD_FILE_DEHYDRATION_DISALLOWED
87 }
88 CloudErrorKind::IncompatibleHardlinks => {
89 Foundation::STATUS_CLOUD_FILE_INCOMPATIBLE_HARDLINKS
90 }
91 CloudErrorKind::InsufficientResources => {
92 Foundation::STATUS_CLOUD_FILE_INSUFFICIENT_RESOURCES
93 }
94 CloudErrorKind::InvalidRequest => Foundation::STATUS_CLOUD_FILE_INVALID_REQUEST,
95 CloudErrorKind::InUse => Foundation::STATUS_CLOUD_FILE_IN_USE,
96 CloudErrorKind::MetadataCorrupt => Foundation::STATUS_CLOUD_FILE_METADATA_CORRUPT,
97 CloudErrorKind::MetadataTooLarge => Foundation::STATUS_CLOUD_FILE_METADATA_TOO_LARGE,
98 CloudErrorKind::NetworkUnavailable => Foundation::STATUS_CLOUD_FILE_NETWORK_UNAVAILABLE,
99 CloudErrorKind::NotInSync => Foundation::STATUS_CLOUD_FILE_NOT_IN_SYNC,
100 CloudErrorKind::NotSupported => Foundation::STATUS_CLOUD_FILE_NOT_SUPPORTED,
101 CloudErrorKind::NotUnderSyncRoot => Foundation::STATUS_CLOUD_FILE_NOT_UNDER_SYNC_ROOT,
102 CloudErrorKind::Pinned => Foundation::STATUS_CLOUD_FILE_PINNED,
103 CloudErrorKind::PropertyBlobChecksumMismatch => {
104 Foundation::STATUS_CLOUD_FILE_PROPERTY_BLOB_CHECKSUM_MISMATCH
105 }
106 CloudErrorKind::PropertyBlobTooLarge => {
107 Foundation::STATUS_CLOUD_FILE_PROPERTY_BLOB_TOO_LARGE
108 }
109 CloudErrorKind::PropertyCorrupt => Foundation::STATUS_CLOUD_FILE_PROPERTY_CORRUPT,
110 CloudErrorKind::PropertyLockConflict => {
111 Foundation::STATUS_CLOUD_FILE_PROPERTY_LOCK_CONFLICT
112 }
113 CloudErrorKind::PropertyVersionNotSupported => {
114 Foundation::STATUS_CLOUD_FILE_PROPERTY_VERSION_NOT_SUPPORTED
115 }
116 CloudErrorKind::ProviderNotRunning => {
117 Foundation::STATUS_CLOUD_FILE_PROVIDER_NOT_RUNNING
118 }
119 CloudErrorKind::ProviderTerminated => Foundation::STATUS_CLOUD_FILE_PROVIDER_TERMINATED,
120 CloudErrorKind::ReadOnlyVolume => Foundation::STATUS_CLOUD_FILE_READ_ONLY_VOLUME,
121 CloudErrorKind::RequestAborted => Foundation::STATUS_CLOUD_FILE_REQUEST_ABORTED,
122 CloudErrorKind::RequestCancelled => Foundation::STATUS_CLOUD_FILE_REQUEST_CANCELED,
123 CloudErrorKind::RequestTimeout => Foundation::STATUS_CLOUD_FILE_REQUEST_TIMEOUT,
124 CloudErrorKind::SyncRootMetadataCorrupt => {
125 Foundation::STATUS_CLOUD_FILE_SYNC_ROOT_METADATA_CORRUPT
126 }
127 CloudErrorKind::TooManyPropertyBlobs => {
128 Foundation::STATUS_CLOUD_FILE_TOO_MANY_PROPERTY_BLOBS
129 }
130 CloudErrorKind::Unsuccessful => Foundation::STATUS_CLOUD_FILE_UNSUCCESSFUL,
131 CloudErrorKind::ValidationFailed => Foundation::STATUS_CLOUD_FILE_VALIDATION_FAILED,
132 }
133 }
134}