     1
     2
     3
     4
     5
     6
     7
     8
     9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69

    /*
     * mCaptcha - A proof of work based DoS protection system
     * Copyright © 2021 Aravinth Manivannan <realravinth@batsense.net>
     *
     * This program is free software: you can redistribute it and/or modify
     * it under the terms of the GNU Affero General Public License as
     * published by the Free Software Foundation, either version 3 of the
     * License, or (at your option) any later version.
     *
     * This program is distributed in the hope that it will be useful,
     * but WITHOUT ANY WARRANTY; without even the implied warranty of
     * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     * GNU Affero General Public License for more details.
     *
     * You should have received a copy of the GNU Affero General Public License
     * along with this program.  If not, see <http://www.gnu.org/licenses/>.
     */

    //! Errors and Result module
    use derive_more::{Display, Error};

    /// Error datatype
    #[derive(Debug, PartialEq, Display, Clone, Error)]
    #[cfg(not(tarpaulin_include))]
    pub enum CaptchaError {
        /// When configuring m_captcha, [DefenseBuilder][crate::defense::DefenseBuilder]
        /// must be passed atleast one `LevelConfig` if not this error will arise
        #[display(fmt = "LevelBuilder should have atleaset one level configured")]
        LevelEmpty,

        /// Visitor count must be a whole number(zero and above).
        /// When configuring m_captcha, [LevelBuilder][crate::defense::LevelBuilder].
        /// difficulty_factor must be set to greater than zero.
        #[display(fmt = "difficulty factor must be greater than zero")]
        DifficultyFactorZero,

        /// Difficulty factor must be set
        #[display(fmt = "Set difficulty factor")]
        SetDifficultyFactor,

        /// Visitor threshold must be set
        #[display(fmt = "Set visitor threshold")]
        SetVisitorThreshold,

        /// Visitor count must be Unique
        #[display(fmt = "Duplicate visitor count")]
        DuplicateVisitorCount,

        /// Difficulty factor should increase with level
        #[display(fmt = "Difficulty factor should increase with level")]
        DecreaseingDifficultyFactor,

        /// Difficulty factor should increase with level
        #[display(fmt = "Actor mailbox error")]
        MailboxError,

        /// Happens when submitted work doesn't satisfy the required
        /// difficulty factor
        #[display(fmt = "Insuffiencient Difficulty")]
        InsuffiencientDifficulty,

        /// Happens when submitted work is computed over string that
        /// isn't in cache
        #[display(fmt = "String now found")]
        StringNotFound,
    }

    /// [Result] datatype for m_captcha
    pub type CaptchaResult<V> = std::result::Result<V, CaptchaError>;