Moved shared data types to 'types' subcrate
This commit is contained in:
@@ -4,6 +4,12 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
|
||||
*/
|
||||
|
||||
use crate::config::Config;
|
||||
use mail_auth::{MX, ResolverCache, Txt};
|
||||
use quick_cache::{
|
||||
Equivalent, Weighter,
|
||||
sync::{DefaultLifecycle, PlaceholderGuard},
|
||||
};
|
||||
use std::{
|
||||
borrow::Borrow,
|
||||
hash::Hash,
|
||||
@@ -12,14 +18,6 @@ use std::{
|
||||
time::{Duration, Instant},
|
||||
};
|
||||
|
||||
use mail_auth::{MX, ResolverCache, Txt};
|
||||
use quick_cache::{
|
||||
Equivalent, Weighter,
|
||||
sync::{DefaultLifecycle, PlaceholderGuard},
|
||||
};
|
||||
|
||||
use crate::config::Config;
|
||||
|
||||
pub struct Cache<K: Eq + Hash + CacheItemWeight, V: Clone + CacheItemWeight>(
|
||||
quick_cache::sync::Cache<K, V, CacheItemWeighter>,
|
||||
);
|
||||
|
||||
@@ -92,7 +92,7 @@ impl Base32Writer {
|
||||
}
|
||||
|
||||
pub fn finalize(mut self) -> String {
|
||||
if self.pos % 5 != 0 {
|
||||
if !self.pos.is_multiple_of(5) {
|
||||
self.push_byte(0, true);
|
||||
}
|
||||
|
||||
|
||||
@@ -4,8 +4,6 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
|
||||
*/
|
||||
|
||||
use std::{fmt::Display, sync::Arc};
|
||||
|
||||
pub mod bimap;
|
||||
pub mod cache;
|
||||
pub mod codec;
|
||||
@@ -26,85 +24,11 @@ use rustls::{
|
||||
client::danger::{HandshakeSignatureValid, ServerCertVerified, ServerCertVerifier},
|
||||
};
|
||||
use rustls_pki_types::TrustAnchor;
|
||||
use std::sync::Arc;
|
||||
|
||||
pub use downcast_rs;
|
||||
pub use erased_serde;
|
||||
|
||||
pub const BLOB_HASH_LEN: usize = 32;
|
||||
|
||||
#[derive(
|
||||
rkyv::Archive,
|
||||
rkyv::Deserialize,
|
||||
rkyv::Serialize,
|
||||
Clone,
|
||||
Debug,
|
||||
Default,
|
||||
PartialEq,
|
||||
Eq,
|
||||
Hash,
|
||||
serde::Serialize,
|
||||
serde::Deserialize,
|
||||
)]
|
||||
#[rkyv(derive(Debug))]
|
||||
#[repr(transparent)]
|
||||
pub struct BlobHash(pub [u8; BLOB_HASH_LEN]);
|
||||
|
||||
impl BlobHash {
|
||||
pub fn new_max() -> Self {
|
||||
BlobHash([u8::MAX; BLOB_HASH_LEN])
|
||||
}
|
||||
|
||||
pub fn generate(value: impl AsRef<[u8]>) -> Self {
|
||||
BlobHash(blake3::hash(value.as_ref()).into())
|
||||
}
|
||||
|
||||
pub fn try_from_hash_slice(value: &[u8]) -> Result<BlobHash, std::array::TryFromSliceError> {
|
||||
value.try_into().map(BlobHash)
|
||||
}
|
||||
|
||||
pub fn as_slice(&self) -> &[u8] {
|
||||
self.0.as_ref()
|
||||
}
|
||||
|
||||
pub fn to_hex(&self) -> String {
|
||||
let mut hex = String::with_capacity(BLOB_HASH_LEN * 2);
|
||||
for byte in self.0.iter() {
|
||||
hex.push_str(&format!("{:02x}", byte));
|
||||
}
|
||||
hex
|
||||
}
|
||||
}
|
||||
|
||||
impl From<&ArchivedBlobHash> for BlobHash {
|
||||
fn from(value: &ArchivedBlobHash) -> Self {
|
||||
BlobHash(value.0)
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<BlobHash> for BlobHash {
|
||||
fn as_ref(&self) -> &BlobHash {
|
||||
self
|
||||
}
|
||||
}
|
||||
|
||||
impl From<BlobHash> for Vec<u8> {
|
||||
fn from(value: BlobHash) -> Self {
|
||||
value.0.to_vec()
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<[u8]> for BlobHash {
|
||||
fn as_ref(&self) -> &[u8] {
|
||||
self.0.as_ref()
|
||||
}
|
||||
}
|
||||
|
||||
impl AsMut<[u8]> for BlobHash {
|
||||
fn as_mut(&mut self) -> &mut [u8] {
|
||||
self.0.as_mut()
|
||||
}
|
||||
}
|
||||
|
||||
pub trait HttpLimitResponse: Sync + Send {
|
||||
fn bytes_with_limit(
|
||||
self,
|
||||
@@ -136,79 +60,6 @@ impl HttpLimitResponse for Response {
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Clone, Debug, Default, PartialEq, Eq, Hash, PartialOrd, Ord)]
|
||||
#[repr(transparent)]
|
||||
pub struct Semver(u64);
|
||||
|
||||
impl Semver {
|
||||
pub fn current() -> Self {
|
||||
env!("CARGO_PKG_VERSION").try_into().unwrap()
|
||||
}
|
||||
|
||||
pub fn new(major: u16, minor: u16, patch: u16) -> Self {
|
||||
let mut version: u64 = 0;
|
||||
version |= (major as u64) << 32;
|
||||
version |= (minor as u64) << 16;
|
||||
version |= patch as u64;
|
||||
Semver(version)
|
||||
}
|
||||
|
||||
pub fn unpack(&self) -> (u16, u16, u16) {
|
||||
let version = self.0;
|
||||
let major = ((version >> 32) & 0xFFFF) as u16;
|
||||
let minor = ((version >> 16) & 0xFFFF) as u16;
|
||||
let patch = (version & 0xFFFF) as u16;
|
||||
(major, minor, patch)
|
||||
}
|
||||
|
||||
pub fn major(&self) -> u16 {
|
||||
(self.0 >> 32) as u16
|
||||
}
|
||||
|
||||
pub fn minor(&self) -> u16 {
|
||||
(self.0 >> 16) as u16
|
||||
}
|
||||
|
||||
pub fn patch(&self) -> u16 {
|
||||
self.0 as u16
|
||||
}
|
||||
|
||||
pub fn is_valid(&self) -> bool {
|
||||
self.0 > 0
|
||||
}
|
||||
}
|
||||
|
||||
impl AsRef<u64> for Semver {
|
||||
fn as_ref(&self) -> &u64 {
|
||||
&self.0
|
||||
}
|
||||
}
|
||||
|
||||
impl From<u64> for Semver {
|
||||
fn from(value: u64) -> Self {
|
||||
Semver(value)
|
||||
}
|
||||
}
|
||||
|
||||
impl TryFrom<&str> for Semver {
|
||||
type Error = ();
|
||||
|
||||
fn try_from(value: &str) -> Result<Self, Self::Error> {
|
||||
let mut parts = value.splitn(3, '.');
|
||||
let major = parts.next().ok_or(())?.parse().map_err(|_| ())?;
|
||||
let minor = parts.next().ok_or(())?.parse().map_err(|_| ())?;
|
||||
let patch = parts.next().ok_or(())?.parse().map_err(|_| ())?;
|
||||
Ok(Semver::new(major, minor, patch))
|
||||
}
|
||||
}
|
||||
|
||||
impl Display for Semver {
|
||||
fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
|
||||
let (major, minor, patch) = self.unpack();
|
||||
write!(f, "{major}.{minor}.{patch}")
|
||||
}
|
||||
}
|
||||
|
||||
pub trait UnwrapFailure<T> {
|
||||
fn failed(self, action: &str) -> T;
|
||||
}
|
||||
|
||||
@@ -260,29 +260,3 @@ impl<T: BitmapItem> Default for Bitmap<T> {
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[repr(transparent)]
|
||||
#[derive(Clone, Copy, Debug, PartialEq, Eq, Hash)]
|
||||
pub struct ShortId(pub u8);
|
||||
|
||||
impl BitmapItem for ShortId {
|
||||
fn max() -> u64 {
|
||||
u8::MAX as u64
|
||||
}
|
||||
|
||||
fn is_valid(&self) -> bool {
|
||||
true
|
||||
}
|
||||
}
|
||||
|
||||
impl From<u64> for ShortId {
|
||||
fn from(value: u64) -> Self {
|
||||
ShortId(value as u8)
|
||||
}
|
||||
}
|
||||
|
||||
impl From<ShortId> for u64 {
|
||||
fn from(value: ShortId) -> Self {
|
||||
value.0 as u64
|
||||
}
|
||||
}
|
||||
|
||||
@@ -4,10 +4,9 @@
|
||||
* SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-SEL
|
||||
*/
|
||||
|
||||
use std::{borrow::Borrow, cmp::Ordering, fmt, hash::Hash};
|
||||
|
||||
use rkyv::Archive;
|
||||
use serde::{Deserialize, Serialize, de::DeserializeOwned, ser::SerializeMap};
|
||||
use std::{borrow::Borrow, cmp::Ordering, fmt, hash::Hash};
|
||||
|
||||
// A map implemented using vectors
|
||||
// used for small datasets of less than 20 items
|
||||
|
||||
Reference in New Issue
Block a user