diff --git a/src/errors.rs b/src/errors.rs index b9232e3..7687afc 100644 --- a/src/errors.rs +++ b/src/errors.rs @@ -18,6 +18,7 @@ //! Errors and Result module use derive_more::{Display, Error}; +#[cfg(feature = "full")] use redis::RedisError; /// Error datatype @@ -84,6 +85,7 @@ pub enum CaptchaError { /// RedisError #[display(fmt = "{}", _0)] + #[cfg(feature = "full")] RedisError(RedisError), /// Weird behaviour from mcaptcha redis module @@ -93,12 +95,14 @@ pub enum CaptchaError { MCaptchaRedisModuleError, } +#[cfg(feature = "full")] impl From for CaptchaError { fn from(e: RedisError) -> Self { Self::RedisError(e) } } +#[cfg(feature = "full")] impl From for CaptchaError { fn from(_: actix::MailboxError) -> Self { Self::MailboxError diff --git a/src/lib.rs b/src/lib.rs index 07e6dcb..9bce453 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -183,16 +183,13 @@ //! } //! ``` #![forbid(unsafe_code)] -#[cfg(feature = "minimal")] pub mod defense; pub mod errors; -#[cfg(feature = "full")] pub mod master; /// message datatypes to interact with [MCaptcha] actor #[cfg(feature = "full")] pub mod cache; -#[cfg(feature = "minimal")] pub mod mcaptcha; #[cfg(feature = "full")] pub mod pow; @@ -204,9 +201,17 @@ mod utils; #[cfg(feature = "full")] pub use crate::cache::hashcache::HashCache; -#[cfg(feature = "minimal")] -pub use defense::{Defense, DefenseBuilder, LevelBuilder}; +pub use crate::defense::{Defense, DefenseBuilder, LevelBuilder}; +pub use crate::master::{AddVisitorResult, CreateMCaptcha}; +pub use crate::mcaptcha::{MCaptcha, MCaptchaBuilder}; #[cfg(feature = "full")] pub use master::embedded::counter::Counter; + #[cfg(feature = "minimal")] -pub use mcaptcha::{MCaptcha, MCaptchaBuilder}; +pub mod dev { + pub use crate::defense; + pub use crate::defense::{Defense, DefenseBuilder, LevelBuilder}; + pub use crate::master::{AddVisitorResult, CreateMCaptcha}; + pub use crate::mcaptcha; + pub use crate::mcaptcha::{MCaptcha, MCaptchaBuilder}; +} diff --git a/src/master/mod.rs b/src/master/mod.rs index e2b4f86..1c10475 100644 --- a/src/master/mod.rs +++ b/src/master/mod.rs @@ -16,14 +16,19 @@ * along with this program. If not, see . */ //! [Master] actor module that manages [MCaptcha] actors +#[cfg(feature = "full")] use std::sync::mpsc::Receiver; +#[cfg(feature = "full")] use actix::dev::*; +#[cfg(feature = "full")] use derive_builder::Builder; use serde::{Deserialize, Serialize}; +#[cfg(feature = "full")] use crate::errors::CaptchaResult; +#[cfg(feature = "full")] pub mod embedded; #[allow( unused_variables, @@ -40,8 +45,10 @@ use crate::mcaptcha::*; dead_code, unused_macros )] +#[cfg(feature = "full")] pub mod redis; +#[cfg(feature = "full")] /// Describes actor handler trait impls that are required by a cache implementation pub trait Master: actix::Actor + actix::Handler + actix::Handler {} @@ -49,6 +56,7 @@ pub trait Master: actix::Actor + actix::Handler + actix::Handler Self { + pub fn new(m: &MCaptcha) -> Self { AddVisitorResult { duration: m.get_duration(), difficulty_factor: m.get_difficulty(), } } } + +#[cfg(feature = "minimal")] +#[derive(Serialize, Deserialize)] +pub struct CreateMCaptcha { + pub levels: Vec, + pub duration: u64, +} diff --git a/src/master/redis/connection.rs b/src/master/redis/connection.rs index 187e549..4d7d44c 100644 --- a/src/master/redis/connection.rs +++ b/src/master/redis/connection.rs @@ -28,9 +28,8 @@ use redis::RedisResult; use redis::Value; use redis::{aio::Connection, cluster::ClusterConnection}; -use super::CreateMCaptcha; use crate::errors::*; -use crate::master::{AddSite, AddVisitor, AddVisitorResult}; +use crate::master::{AddSite, AddVisitor, AddVisitorResult, CreateMCaptcha}; pub enum RedisConnection { Single(Rc>), diff --git a/src/master/redis/master.rs b/src/master/redis/master.rs index 790e226..013d4db 100644 --- a/src/master/redis/master.rs +++ b/src/master/redis/master.rs @@ -34,7 +34,7 @@ use serde::{Deserialize, Serialize}; use crate::defense::Level; use crate::errors::*; use crate::master::AddVisitorResult; -use crate::master::{AddSite, AddVisitor, Master as MasterTrait}; +use crate::master::{AddSite, AddVisitor, CreateMCaptcha, Master as MasterTrait}; use super::connection::RedisConnection; @@ -44,11 +44,6 @@ pub enum Redis { Cluster(ClusterClient), } -#[derive(Serialize, Deserialize)] -pub struct CreateMCaptcha { - pub levels: Vec, - pub duration: u64, -} pub struct Master { pub redis: Redis, pub con: Rc, diff --git a/src/mcaptcha.rs b/src/mcaptcha.rs index fdb9c5a..d4d2f86 100644 --- a/src/mcaptcha.rs +++ b/src/mcaptcha.rs @@ -78,7 +78,7 @@ pub struct MCaptcha { duration: u64, } -impl From for crate::master::redis::CreateMCaptcha { +impl From for crate::master::CreateMCaptcha { fn from(m: MCaptcha) -> Self { Self { levels: m.defense.into(),