From d672d067cdd1866e6518b0b147280e4d757efd13 Mon Sep 17 00:00:00 2001 From: oxalica Date: Thu, 29 Aug 2024 18:14:40 -0400 Subject: [PATCH] Ser/de bitflags as raw integers --- Cargo.lock | 7 +++++++ Cargo.toml | 3 ++- src/types.rs | 11 ++++++++--- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 77acfea..8498eba 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -209,6 +209,12 @@ name = "bitflags" version = "2.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b048fb63fd8b5923fc5aa7b340d8e156aec7ec02f0c78fa8a6ddc2613f6f71de" + +[[package]] +name = "bitflags_serde_shim" +version = "0.2.5" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "df031780c32b0f93cecaf883fa9e351e74679e24380c534aeef94556cfd80ac9" dependencies = [ "serde", ] @@ -220,6 +226,7 @@ dependencies = [ "anyhow", "axum", "bitflags", + "bitflags_serde_shim", "clap", "ed25519-dalek", "futures-util", diff --git a/Cargo.toml b/Cargo.toml index 5e28bac..de00203 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -7,7 +7,8 @@ edition = "2021" [dependencies] anyhow = "1.0.86" axum = { version = "0.7.5", features = ["tokio"] } -bitflags = { version = "2.6.0", features = ["serde"] } +bitflags = "2.6.0" +bitflags_serde_shim = "0.2.5" clap = { version = "4.5.16", features = ["derive"] } ed25519-dalek = { version = "2.1.1", features = ["digest", "serde"] } futures-util = "0.3.30" diff --git a/src/types.rs b/src/types.rs index f064b1f..386349e 100644 --- a/src/types.rs +++ b/src/types.rs @@ -4,6 +4,7 @@ use std::time::SystemTime; use anyhow::{ensure, Context}; use bitflags::bitflags; +use bitflags_serde_shim::impl_serde_for_bitflags; use ed25519_dalek::{ Signature, Signer, SigningKey, VerifyingKey, PUBLIC_KEY_LENGTH, SIGNATURE_LENGTH, }; @@ -115,14 +116,14 @@ pub enum RoomAdminPayload { } bitflags! { - #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] + #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct ServerPermission: u64 { const CREATE_ROOM = 1 << 0; const ALL = !0; } - #[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)] + #[derive(Debug, Clone, Copy, PartialEq, Eq)] pub struct RoomPermission: u64 { const PUSH_CHAT = 1 << 0; const ADD_MEMBER = 1 << 1; @@ -130,7 +131,7 @@ bitflags! { const ALL = !0; } - #[derive(Debug, Clone, Copy, PartialEq, Eq, Default, Serialize, Deserialize)] + #[derive(Debug, Clone, Copy, PartialEq, Eq, Default)] pub struct RoomAttrs: u64 { const PUBLIC_READABLE = 1 << 0; @@ -138,6 +139,10 @@ bitflags! { } } +impl_serde_for_bitflags!(ServerPermission); +impl_serde_for_bitflags!(RoomPermission); +impl_serde_for_bitflags!(RoomAttrs); + mod sql_impl { use rusqlite::types::{FromSql, FromSqlError, FromSqlResult, ToSqlOutput, ValueRef}; use rusqlite::{Result, ToSql};