/* **************************************************************************************************************** */
/* **************************************************** MODS ****************************************************** */
/* *************************************************** IMPORTS **************************************************** */
/* **************************************************************************************************************** */
use std::fmt::Debug;

use yummy_model::auth::UserJwt;

/* **************************************************************************************************************** */
/* ******************************************** STATICS/CONSTS/TYPES ********************************************** */
/* **************************************************** MACROS **************************************************** */
/* *************************************************** STRUCTS **************************************************** */
/* **************************************************************************************************************** */

#[derive(Default, Debug)]
pub struct EmptyClient;

/* **************************************************************************************************************** */
/* **************************************************** ENUMS ***************************************************** */
/* ************************************************** FUNCTIONS *************************************************** */
/* *************************************************** TRAITS ***************************************************** */
/* **************************************************************************************************************** */
pub trait ClientTrait: Debug {
    fn send(&self, message: String);
    fn authenticated(&self, user: UserJwt);
}

/* **************************************************************************************************************** */
/* ************************************************* IMPLEMENTS *************************************************** */
/* ********************************************** TRAIT IMPLEMENTS ************************************************ */
/* **************************************************************************************************************** */
impl ClientTrait for EmptyClient {
    fn send(&self, _: String) {
        println!("EmptyClient received message");
    }

    fn authenticated(&self, _: UserJwt) {
        println!("EmptyClient authenticated");
    }
}

/* **************************************************************************************************************** */
/* ************************************************* MACROS CALL ************************************************** */
/* ************************************************** UNIT TESTS ************************************************** */
/* **************************************************************************************************************** */
#[cfg(test)]
mod test {
    use yummy_model::auth::UserJwt;

    use super::{EmptyClient, ClientTrait};

    #[test]
    fn empty_client() {
        let client = EmptyClient::default();
        client.authenticated(UserJwt::default());
        client.send("".to_string());
    }
}
