From f878f0b5eaa44e8ee8d67cbfd706926ff2119113 Mon Sep 17 00:00:00 2001 From: Owen Jacobson Date: Tue, 1 Oct 2024 23:57:22 -0400 Subject: Organize IDs into top-level namespaces. (This is part of a larger reorganization.) --- src/channel/id.rs | 38 +++++++++++++++++++++++++++++++++++++ src/channel/mod.rs | 3 +++ src/channel/routes.rs | 7 ++----- src/channel/routes/test/on_send.rs | 2 +- src/events/app.rs | 3 ++- src/events/repo/message.rs | 11 ++++------- src/events/types.rs | 11 ++++------- src/lib.rs | 1 + src/login/app.rs | 6 ++++-- src/login/extract.rs | 4 ++-- src/login/id.rs | 24 +++++++++++++++++++++++ src/login/mod.rs | 7 +++++-- src/login/repo/auth.rs | 5 +---- src/login/token/id.rs | 27 ++++++++++++++++++++++++++ src/login/token/mod.rs | 3 +++ src/login/types.rs | 2 +- src/message/id.rs | 27 ++++++++++++++++++++++++++ src/message/mod.rs | 3 +++ src/repo/channel.rs | 39 +------------------------------------- src/repo/login/mod.rs | 2 +- src/repo/login/store.rs | 25 +----------------------- src/repo/message.rs | 28 +-------------------------- src/repo/token.rs | 33 +++++--------------------------- 23 files changed, 161 insertions(+), 150 deletions(-) create mode 100644 src/channel/id.rs create mode 100644 src/login/id.rs create mode 100644 src/login/token/id.rs create mode 100644 src/login/token/mod.rs create mode 100644 src/message/id.rs create mode 100644 src/message/mod.rs (limited to 'src') diff --git a/src/channel/id.rs b/src/channel/id.rs new file mode 100644 index 0000000..22a2700 --- /dev/null +++ b/src/channel/id.rs @@ -0,0 +1,38 @@ +use std::fmt; + +use crate::id::Id as BaseId; + +// Stable identifier for a [Channel]. Prefixed with `C`. +#[derive( + Clone, + Debug, + Eq, + Hash, + Ord, + PartialEq, + PartialOrd, + sqlx::Type, + serde::Deserialize, + serde::Serialize, +)] +#[sqlx(transparent)] +#[serde(transparent)] +pub struct Id(BaseId); + +impl From for Id { + fn from(id: BaseId) -> Self { + Self(id) + } +} + +impl Id { + pub fn generate() -> Self { + BaseId::generate("C") + } +} + +impl fmt::Display for Id { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + self.0.fmt(f) + } +} diff --git a/src/channel/mod.rs b/src/channel/mod.rs index 9f79dbb..3115e98 100644 --- a/src/channel/mod.rs +++ b/src/channel/mod.rs @@ -1,4 +1,7 @@ pub mod app; +mod id; mod routes; pub use self::routes::router; + +pub use self::id::Id; diff --git a/src/channel/routes.rs b/src/channel/routes.rs index 067d213..72d6195 100644 --- a/src/channel/routes.rs +++ b/src/channel/routes.rs @@ -10,14 +10,11 @@ use axum_extra::extract::Query; use super::app; use crate::{ app::App, + channel, clock::RequestedAt, error::Internal, events::app::EventsError, - repo::{ - channel::{self, Channel}, - login::Login, - sequence::Sequence, - }, + repo::{channel::Channel, login::Login, sequence::Sequence}, }; #[cfg(test)] diff --git a/src/channel/routes/test/on_send.rs b/src/channel/routes/test/on_send.rs index d37ed21..987784d 100644 --- a/src/channel/routes/test/on_send.rs +++ b/src/channel/routes/test/on_send.rs @@ -2,9 +2,9 @@ use axum::extract::{Json, Path, State}; use futures::stream::StreamExt; use crate::{ + channel, channel::routes, events::{app, types}, - repo::channel, test::fixtures::{self, future::Immediately as _}, }; diff --git a/src/events/app.rs b/src/events/app.rs index c15f11e..1fa2f70 100644 --- a/src/events/app.rs +++ b/src/events/app.rs @@ -12,9 +12,10 @@ use super::{ types::{self, ChannelEvent}, }; use crate::{ + channel, clock::DateTime, repo::{ - channel::{self, Provider as _}, + channel::Provider as _, error::NotFound as _, login::Login, sequence::{Provider as _, Sequence}, diff --git a/src/events/repo/message.rs b/src/events/repo/message.rs index 3237553..00c24b1 100644 --- a/src/events/repo/message.rs +++ b/src/events/repo/message.rs @@ -1,14 +1,11 @@ use sqlx::{sqlite::Sqlite, SqliteConnection, Transaction}; use crate::{ + channel, clock::DateTime, events::types, - repo::{ - channel::{self, Channel}, - login::{self, Login}, - message::{self, Message}, - sequence::Sequence, - }, + login, message, + repo::{channel::Channel, login::Login, message::Message, sequence::Sequence}, }; pub trait Provider { @@ -172,7 +169,7 @@ impl<'c> Events<'c> { created_at: row.channel_created_at, created_sequence: row.channel_created_sequence, }, - sender: login::Login { + sender: Login { id: row.sender_id, name: row.sender_name, }, diff --git a/src/events/types.rs b/src/events/types.rs index aca3af4..762b6e5 100644 --- a/src/events/types.rs +++ b/src/events/types.rs @@ -1,11 +1,8 @@ use crate::{ + channel, clock::DateTime, - repo::{ - channel::{self, Channel}, - login::Login, - message, - sequence::Sequence, - }, + message, + repo::{channel::Channel, login::Login, message::Message, sequence::Sequence}, }; #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)] @@ -66,7 +63,7 @@ impl From for ChannelEventData { pub struct MessageEvent { pub channel: Channel, pub sender: Login, - pub message: message::Message, + pub message: Message, } impl From for ChannelEventData { diff --git a/src/lib.rs b/src/lib.rs index 271118b..2300071 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -12,6 +12,7 @@ mod events; mod expire; mod id; mod login; +mod message; mod password; mod repo; #[cfg(test)] diff --git a/src/login/app.rs b/src/login/app.rs index f1dffb9..8ea0a91 100644 --- a/src/login/app.rs +++ b/src/login/app.rs @@ -6,7 +6,9 @@ use futures::{ }; use sqlx::sqlite::SqlitePool; -use super::{broadcaster::Broadcaster, extract::IdentitySecret, repo::auth::Provider as _, types}; +use super::{ + broadcaster::Broadcaster, extract::IdentitySecret, repo::auth::Provider as _, token, types, +}; use crate::{ clock::DateTime, password::Password, @@ -14,7 +16,7 @@ use crate::{ error::NotFound as _, login::{Login, Provider as _}, sequence::{Provider as _, Sequence}, - token::{self, Provider as _}, + token::Provider as _, }, }; diff --git a/src/login/extract.rs b/src/login/extract.rs index bfdbe8d..39dd9e4 100644 --- a/src/login/extract.rs +++ b/src/login/extract.rs @@ -11,8 +11,8 @@ use crate::{ app::App, clock::RequestedAt, error::{Internal, Unauthorized}, - login::app::ValidateError, - repo::{login::Login, token}, + login::{app::ValidateError, token}, + repo::login::Login, }; // The usage pattern here - receive the extractor as an argument, return it in diff --git a/src/login/id.rs b/src/login/id.rs new file mode 100644 index 0000000..c46d697 --- /dev/null +++ b/src/login/id.rs @@ -0,0 +1,24 @@ +use crate::id::Id as BaseId; + +// Stable identifier for a [Login]. Prefixed with `L`. +#[derive(Clone, Debug, Eq, PartialEq, sqlx::Type, serde::Serialize)] +#[sqlx(transparent)] +pub struct Id(BaseId); + +impl From for Id { + fn from(id: BaseId) -> Self { + Self(id) + } +} + +impl Id { + pub fn generate() -> Self { + BaseId::generate("L") + } +} + +impl std::fmt::Display for Id { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.0.fmt(f) + } +} diff --git a/src/login/mod.rs b/src/login/mod.rs index 6ae82ac..0430f4b 100644 --- a/src/login/mod.rs +++ b/src/login/mod.rs @@ -1,8 +1,11 @@ -pub use self::routes::router; - pub mod app; pub mod broadcaster; pub mod extract; +mod id; mod repo; mod routes; +pub mod token; pub mod types; + +pub use self::id::Id; +pub use self::routes::router; diff --git a/src/login/repo/auth.rs b/src/login/repo/auth.rs index 3033c8f..9816c5c 100644 --- a/src/login/repo/auth.rs +++ b/src/login/repo/auth.rs @@ -1,9 +1,6 @@ use sqlx::{sqlite::Sqlite, SqliteConnection, Transaction}; -use crate::{ - password::StoredHash, - repo::login::{self, Login}, -}; +use crate::{login, password::StoredHash, repo::login::Login}; pub trait Provider { fn auth(&mut self) -> Auth; diff --git a/src/login/token/id.rs b/src/login/token/id.rs new file mode 100644 index 0000000..9ef063c --- /dev/null +++ b/src/login/token/id.rs @@ -0,0 +1,27 @@ +use std::fmt; + +use crate::id::Id as BaseId; + +// Stable identifier for a token. Prefixed with `T`. +#[derive(Clone, Debug, Eq, Hash, PartialEq, sqlx::Type, serde::Deserialize, serde::Serialize)] +#[sqlx(transparent)] +#[serde(transparent)] +pub struct Id(BaseId); + +impl From for Id { + fn from(id: BaseId) -> Self { + Self(id) + } +} + +impl Id { + pub fn generate() -> Self { + BaseId::generate("T") + } +} + +impl fmt::Display for Id { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + self.0.fmt(f) + } +} diff --git a/src/login/token/mod.rs b/src/login/token/mod.rs new file mode 100644 index 0000000..d563a88 --- /dev/null +++ b/src/login/token/mod.rs @@ -0,0 +1,3 @@ +mod id; + +pub use self::id::Id; diff --git a/src/login/types.rs b/src/login/types.rs index 7c7cbf9..a210977 100644 --- a/src/login/types.rs +++ b/src/login/types.rs @@ -1,4 +1,4 @@ -use crate::repo::token; +use crate::login::token; #[derive(Clone, Debug)] pub struct TokenRevoked { diff --git a/src/message/id.rs b/src/message/id.rs new file mode 100644 index 0000000..385b103 --- /dev/null +++ b/src/message/id.rs @@ -0,0 +1,27 @@ +use std::fmt; + +use crate::id::Id as BaseId; + +// Stable identifier for a [Message]. Prefixed with `M`. +#[derive(Clone, Debug, Eq, Hash, PartialEq, sqlx::Type, serde::Deserialize, serde::Serialize)] +#[sqlx(transparent)] +#[serde(transparent)] +pub struct Id(BaseId); + +impl From for Id { + fn from(id: BaseId) -> Self { + Self(id) + } +} + +impl Id { + pub fn generate() -> Self { + BaseId::generate("M") + } +} + +impl fmt::Display for Id { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + self.0.fmt(f) + } +} diff --git a/src/message/mod.rs b/src/message/mod.rs new file mode 100644 index 0000000..d563a88 --- /dev/null +++ b/src/message/mod.rs @@ -0,0 +1,3 @@ +mod id; + +pub use self::id::Id; diff --git a/src/repo/channel.rs b/src/repo/channel.rs index ad42710..9f1d930 100644 --- a/src/repo/channel.rs +++ b/src/repo/channel.rs @@ -1,12 +1,10 @@ -use std::fmt; - use sqlx::{sqlite::Sqlite, SqliteConnection, Transaction}; use super::sequence::Sequence; use crate::{ + channel::Id, clock::DateTime, events::types::{self}, - id::Id as BaseId, }; pub trait Provider { @@ -176,38 +174,3 @@ impl<'c> Channels<'c> { Ok(channels) } } - -// Stable identifier for a [Channel]. Prefixed with `C`. -#[derive( - Clone, - Debug, - Eq, - Hash, - Ord, - PartialEq, - PartialOrd, - sqlx::Type, - serde::Deserialize, - serde::Serialize, -)] -#[sqlx(transparent)] -#[serde(transparent)] -pub struct Id(BaseId); - -impl From for Id { - fn from(id: BaseId) -> Self { - Self(id) - } -} - -impl Id { - pub fn generate() -> Self { - BaseId::generate("C") - } -} - -impl fmt::Display for Id { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - self.0.fmt(f) - } -} diff --git a/src/repo/login/mod.rs b/src/repo/login/mod.rs index a1b4c6f..4ff7a96 100644 --- a/src/repo/login/mod.rs +++ b/src/repo/login/mod.rs @@ -1,4 +1,4 @@ mod extract; mod store; -pub use self::store::{Id, Login, Provider}; +pub use self::store::{Login, Provider}; diff --git a/src/repo/login/store.rs b/src/repo/login/store.rs index b485941..47d1a7c 100644 --- a/src/repo/login/store.rs +++ b/src/repo/login/store.rs @@ -1,6 +1,6 @@ use sqlx::{sqlite::Sqlite, SqliteConnection, Transaction}; -use crate::{id::Id as BaseId, password::StoredHash}; +use crate::{login::Id, password::StoredHash}; pub trait Provider { fn logins(&mut self) -> Logins; @@ -61,26 +61,3 @@ impl<'t> From<&'t mut SqliteConnection> for Logins<'t> { Self(tx) } } - -// Stable identifier for a [Login]. Prefixed with `L`. -#[derive(Clone, Debug, Eq, PartialEq, sqlx::Type, serde::Serialize)] -#[sqlx(transparent)] -pub struct Id(BaseId); - -impl From for Id { - fn from(id: BaseId) -> Self { - Self(id) - } -} - -impl Id { - pub fn generate() -> Self { - BaseId::generate("L") - } -} - -impl std::fmt::Display for Id { - fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { - self.0.fmt(f) - } -} diff --git a/src/repo/message.rs b/src/repo/message.rs index a1f73d5..acde3ea 100644 --- a/src/repo/message.rs +++ b/src/repo/message.rs @@ -1,30 +1,4 @@ -use std::fmt; - -use crate::id::Id as BaseId; - -// Stable identifier for a [Message]. Prefixed with `M`. -#[derive(Clone, Debug, Eq, Hash, PartialEq, sqlx::Type, serde::Deserialize, serde::Serialize)] -#[sqlx(transparent)] -#[serde(transparent)] -pub struct Id(BaseId); - -impl From for Id { - fn from(id: BaseId) -> Self { - Self(id) - } -} - -impl Id { - pub fn generate() -> Self { - BaseId::generate("M") - } -} - -impl fmt::Display for Id { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - self.0.fmt(f) - } -} +use crate::message::Id; #[derive(Clone, Debug, Eq, PartialEq, serde::Serialize)] pub struct Message { diff --git a/src/repo/token.rs b/src/repo/token.rs index 1663f5e..79e5c54 100644 --- a/src/repo/token.rs +++ b/src/repo/token.rs @@ -1,10 +1,11 @@ -use std::fmt; - use sqlx::{sqlite::Sqlite, SqliteConnection, Transaction}; use uuid::Uuid; -use super::login::{self, Login}; -use crate::{clock::DateTime, id::Id as BaseId, login::extract::IdentitySecret}; +use super::login::Login; +use crate::{ + clock::DateTime, + login::{self, extract::IdentitySecret, token::Id}, +}; pub trait Provider { fn tokens(&mut self) -> Tokens; @@ -148,27 +149,3 @@ impl<'c> Tokens<'c> { Ok(login) } } - -// Stable identifier for a token. Prefixed with `T`. -#[derive(Clone, Debug, Eq, Hash, PartialEq, sqlx::Type, serde::Deserialize, serde::Serialize)] -#[sqlx(transparent)] -#[serde(transparent)] -pub struct Id(BaseId); - -impl From for Id { - fn from(id: BaseId) -> Self { - Self(id) - } -} - -impl Id { - pub fn generate() -> Self { - BaseId::generate("T") - } -} - -impl fmt::Display for Id { - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - self.0.fmt(f) - } -} -- cgit v1.2.3