aboutsummaryrefslogtreecommitdiff
path: root/src/field/utils
diff options
context:
space:
mode:
authorRuben Beltran del Rio <git@r.bdr.sh>2025-02-09 22:44:21 +0100
committerRuben Beltran del Rio <git@r.bdr.sh>2025-02-09 22:44:21 +0100
commitc402a8923d2e89607a007f46ee4cde15714d746d (patch)
tree597f0e436cac0ec2dda2eb8437cfb57de6c95a82 /src/field/utils
parent48408b9e42eaeeaf0944f9a37f7882ba9ddc7f19 (diff)
Restart with fields module
Diffstat (limited to 'src/field/utils')
-rw-r--r--src/field/utils/access_privileges.rs47
-rw-r--r--src/field/utils/banner_type.rs9
-rw-r--r--src/field/utils/mod.rs6
-rw-r--r--src/field/utils/user_flags.rs22
4 files changed, 84 insertions, 0 deletions
diff --git a/src/field/utils/access_privileges.rs b/src/field/utils/access_privileges.rs
new file mode 100644
index 0000000..eea9557
--- /dev/null
+++ b/src/field/utils/access_privileges.rs
@@ -0,0 +1,47 @@
+//! This module contains utilities to deal with the user access bitmap
+
+pub const CAN_DELETE_FILES: u64 = 2_u64.pow(0);
+pub const CAN_UPLOAD_FILES: u64 = 2_u64.pow(1);
+pub const CAN_DOWNLOAD_FILES: u64 = 2_u64.pow(2);
+pub const CAN_RENAME_FILES: u64 = 2_u64.pow(3);
+pub const CAN_MOVE_FILES: u64 = 2_u64.pow(4);
+pub const CAN_CREATE_FOLDERS: u64 = 2_u64.pow(5);
+pub const CAN_DELETE_FOLDERS: u64 = 2_u64.pow(6);
+pub const CAN_RENAME_FOLDERS: u64 = 2_u64.pow(7);
+pub const CAN_MOVE_FOLDERS: u64 = 2_u64.pow(8);
+pub const CAN_READ_CHATS: u64 = 2_u64.pow(9);
+pub const CAN_SEND_CHATS: u64 = 2_u64.pow(10);
+pub const CAN_OPEN_CHATS: u64 = 2_u64.pow(11);
+pub const CAN_CLOSE_CHATS: u64 = 2_u64.pow(12);
+pub const CAN_BE_SHOWN_IN_LIST: u64 = 2_u64.pow(13);
+pub const CAN_CREATE_USERS: u64 = 2_u64.pow(14);
+pub const CAN_DELETE_USERS: u64 = 2_u64.pow(15);
+pub const CAN_OPEN_USERS: u64 = 2_u64.pow(16);
+pub const CAN_MODIFY_USERS: u64 = 2_u64.pow(17);
+pub const CAN_CHANGE_OWN_PASSWORD: u64 = 2_u64.pow(18);
+pub const CAN_SEND_PRIVATE_MESSAGES: u64 = 2_u64.pow(19);
+pub const CAN_READ_NEWS_ARTICLES: u64 = 2_u64.pow(20);
+pub const CAN_POST_NEWS_ARTICLES: u64 = 2_u64.pow(21);
+pub const CAN_DISCONNECT_USERS: u64 = 2_u64.pow(22);
+pub const CANNOT_BE_DISCONNECTED: u64 = 2_u64.pow(23);
+pub const CAN_GET_CLIENT_INFO: u64 = 2_u64.pow(24);
+pub const CAN_UPLOAD_ANYWHERE: u64 = 2_u64.pow(25);
+pub const CAN_USE_ANY_NAME: u64 = 2_u64.pow(26);
+pub const CAN_SKIP_AGREEMENT: u64 = 2_u64.pow(27);
+pub const CAN_SET_FILE_COMMENT: u64 = 2_u64.pow(28);
+pub const CAN_SET_FOLDER_COMMENT: u64 = 2_u64.pow(29);
+pub const CAN_VIEW_DROP_BOXES: u64 = 2_u64.pow(30);
+pub const CAN_MAKE_ALIASES: u64 = 2_u64.pow(31);
+pub const CAN_BROADCAST: u64 = 2_u64.pow(32);
+pub const CAN_DELETE_NEWS_ARTICLES: u64 = 2_u64.pow(33);
+pub const CAN_CREATE_NEWS_CATEGORIES: u64 = 2_u64.pow(34);
+pub const CAN_DELETE_NEWS_CATEGORIES: u64 = 2_u64.pow(35);
+pub const CAN_CREATE_NEWS_FOLDERS: u64 = 2_u64.pow(36);
+pub const CAN_DELETE_NEWS_FOLDERS: u64 = 2_u64.pow(37);
+pub const CAN_UPLOAD_FOLDERS: u64 = 2_u64.pow(38);
+pub const CAN_DOWNLOAD_FOLDERS: u64 = 2_u64.pow(39);
+pub const CAN_SEND_MESSAGES: u64 = 2_u64.pow(40);
+
+pub fn can(permission: u64, bits: u64) -> bool {
+ bits & permission != 0
+}
diff --git a/src/field/utils/banner_type.rs b/src/field/utils/banner_type.rs
new file mode 100644
index 0000000..eb4e10c
--- /dev/null
+++ b/src/field/utils/banner_type.rs
@@ -0,0 +1,9 @@
+#[repr(u16)]
+#[derive(Debug, Clone, Copy, PartialEq, Eq)]
+pub enum BannerType {
+ URL = 1,
+ JPEG = 3,
+ GIF = 4,
+ BMP = 5,
+ PICT = 6,
+}
diff --git a/src/field/utils/mod.rs b/src/field/utils/mod.rs
new file mode 100644
index 0000000..83b3239
--- /dev/null
+++ b/src/field/utils/mod.rs
@@ -0,0 +1,6 @@
+//! This module contains utilities to interact with specialized fields (eg.
+//! bitmaps)
+
+pub mod access_privileges;
+pub mod banner_type;
+pub mod user_flags;
diff --git a/src/field/utils/user_flags.rs b/src/field/utils/user_flags.rs
new file mode 100644
index 0000000..6c79e8b
--- /dev/null
+++ b/src/field/utils/user_flags.rs
@@ -0,0 +1,22 @@
+//! This module contains utilities to read the data in a UserFlags bitmap.
+
+const AWAY: u32 = 0b0001;
+const ADMIN_OR_DISCONNECTED: u32 = 0b0010;
+const REFUSES_PRIVATE_MESSAGES: u32 = 0b0100;
+const REFUSES_PRIVATE_CHAT: u32 = 0b1000;
+
+pub fn is_away(bits: u32) -> bool {
+ bits & AWAY != 0
+}
+
+pub fn is_admin_or_disconnected(bits: u32) -> bool {
+ bits & ADMIN_OR_DISCONNECTED != 0
+}
+
+pub fn refuses_private_messages(bits: u32) -> bool {
+ bits & REFUSES_PRIVATE_MESSAGES != 0
+}
+
+pub fn refuses_private_chat(bits: u32) -> bool {
+ bits & REFUSES_PRIVATE_CHAT != 0
+}