logid 0.12.2

Rust logging framework using IDs to identify log entries.
Documentation
use logid::log_id::{LogId, LogLevel};
use logid::{DbgLogId, ErrLogId, FromLogId, InfoLogId, TraceLogId, WarnLogId};

#[derive(PartialEq, Eq, Debug, Default, ErrLogId, FromLogId)]
enum LogIdEnum {
    #[default]
    First,
    Second,
    Third,
}

#[derive(PartialEq, Eq, Debug, Default, ErrLogId, FromLogId)]
enum OtherLogIdEnum {
    One,
    Two,
    #[default]
    Three,
}

#[test]
fn enum_into_log_id() {
    let first_enum_id: LogId = LogIdEnum::First.into();
    let second_enum_id: LogId = LogIdEnum::Second.into();
    let third_enum_id: LogId = LogIdEnum::Third.into();

    assert_eq!(
        first_enum_id.get_module_path(),
        module_path!(),
        "Derive set wrong module path."
    );
    assert_eq!(
        first_enum_id.get_identifier(),
        "LogIdEnum::First",
        "Derive set wrong identifier name for first variant."
    );
    assert_eq!(
        first_enum_id.get_log_level(),
        LogLevel::Error,
        "Derive set wrong log level."
    );
    assert_eq!(
        second_enum_id.get_identifier(),
        "LogIdEnum::Second",
        "Derive set wrong identifier name for second variant."
    );
    assert_eq!(
        third_enum_id.get_identifier(),
        "LogIdEnum::Third",
        "Derive set wrong identifier name for third variant."
    );
}

#[test]
fn enum_as_err_log_id() {
    let first_id: LogId = LogIdEnum::First.into();
    let first_enum: LogIdEnum = first_id.into();

    assert_eq!(
        LogIdEnum::from(first_id),
        LogIdEnum::First,
        "Conversion back to enum using `from()` failed.",
    );
    assert_eq!(
        first_enum,
        LogIdEnum::First,
        "Conversion back to enum using `into()` failed.",
    );
    assert_eq!(
        first_id.get_log_level(),
        LogLevel::Error,
        "LogLevel::Error was not set using ErrLogId derive macro.",
    );
}

#[test]
fn enums_as_log_id_differ() {
    let first_enum_id: LogId = LogIdEnum::First.into();
    let other_enum_id: LogId = OtherLogIdEnum::One.into();

    assert_ne!(
        first_enum_id, other_enum_id,
        "Converted LogIds from different enums are equal.",
    );
}

#[derive(PartialEq, Eq, Debug, Default, WarnLogId)]
enum WarnLogId {
    #[default]
    First,
    Second,
}

#[test]
fn enum_as_warn_log_id() {
    let warn_id: LogId = WarnLogId::Second.into();

    assert_eq!(
        warn_id.get_identifier(),
        "WarnLogId::Second",
        "Derive set wrong identifier name for second variant.",
    );

    assert_eq!(
        warn_id.get_log_level(),
        LogLevel::Warn,
        "LogLevel::Warn was not set using WarnLogId derive macro.",
    );
}

#[derive(PartialEq, Eq, Debug, Default, InfoLogId)]
enum InfoLogId {
    #[default]
    First,
    Second,
}

#[test]
fn enum_as_info_log_id() {
    let info_id: LogId = InfoLogId::Second.into();

    assert_eq!(
        info_id.get_identifier(),
        "InfoLogId::Second",
        "Derive set wrong identifier name for second variant.",
    );

    assert_eq!(
        info_id.get_log_level(),
        LogLevel::Info,
        "LogLevel::Info was not set using InfoLogId derive macro.",
    );
}

#[derive(PartialEq, Eq, Debug, Default, DbgLogId)]
enum DbgLogId {
    #[default]
    First,
    Second,
}

#[test]
fn enum_as_dbg_log_id() {
    let dbg_id: LogId = DbgLogId::Second.into();

    assert_eq!(
        dbg_id.get_identifier(),
        "DbgLogId::Second",
        "Derive set wrong identifier name for second variant.",
    );

    assert_eq!(
        dbg_id.get_log_level(),
        LogLevel::Debug,
        "LogLevel::Debug was not set using DbgLogId derive macro.",
    );
}

#[derive(PartialEq, Eq, Debug, Default, TraceLogId)]
enum TraceLogId {
    #[default]
    First,
    Second,
}

#[test]
fn enum_as_trace_log_id() {
    let trace_id: LogId = TraceLogId::Second.into();

    assert_eq!(
        trace_id.get_identifier(),
        "TraceLogId::Second",
        "Derive set wrong identifier name for second variant.",
    );

    assert_eq!(
        trace_id.get_log_level(),
        LogLevel::Trace,
        "LogLevel::Trace was not set using TraceLogId derive macro.",
    );
}

#[derive(PartialEq, Eq, Debug, Default, ErrLogId)]
enum ComplexLogId {
    #[default]
    First,
    Second(String),
    Third {
        field: String,
    },
    Fourth {
        field_1: usize,
        field_2: String,
    },
}

#[test]
fn complex_enum_log_id_tuple_variant() {
    let complex_id: LogId = ComplexLogId::Second(String::new()).into();

    assert_eq!(
        complex_id.get_identifier(),
        "ComplexLogId::Second(_)",
        "Derive set wrong identifier name for second variant.",
    );

    assert_eq!(
        complex_id.get_log_level(),
        LogLevel::Error,
        "LogLevel::Error was not set using ErrLogId derive macro.",
    );
}

#[test]
fn complex_enum_log_id_struct_variant_single_field() {
    let complex_id: LogId = ComplexLogId::Third {
        field: String::new(),
    }
    .into();

    assert_eq!(
        complex_id.get_identifier(),
        "ComplexLogId::Third{..}",
        "Derive set wrong identifier name for third variant.",
    );

    assert_eq!(
        complex_id.get_log_level(),
        LogLevel::Error,
        "LogLevel::Error was not set using ErrLogId derive macro.",
    );
}

#[test]
fn complex_enum_log_id_struct_variant_mult_fields() {
    let complex_id: LogId = ComplexLogId::Fourth {
        field_1: 1,
        field_2: String::new(),
    }
    .into();

    assert_eq!(
        complex_id.get_identifier(),
        "ComplexLogId::Fourth{..}",
        "Derive set wrong identifier name for fourth variant.",
    );

    assert_eq!(
        complex_id.get_log_level(),
        LogLevel::Error,
        "LogLevel::Error was not set using ErrLogId derive macro.",
    );
}