kmip-protocol 0.4.3

KMIP protocol object (de)serialization
Documentation
use kmip_protocol::client::Client;
use kmip_protocol::types::traits::ReadWrite;
use log::error;

use crate::config::Opt;

pub(crate) fn init_logging(opt: &Opt) {
    let level = match (opt.quiet, opt.verbose) {
        (true, _) => log::LevelFilter::Error,
        (false, 1) => log::LevelFilter::Debug,
        (false, n) if n >= 2 => log::LevelFilter::Trace,
        _ => log::LevelFilter::Info,
    };
    simple_logging::log_to_stderr(level);
}

pub(crate) trait ToCsvString {
    fn to_csv_string(self) -> String;
}

impl<T> ToCsvString for Option<Vec<T>>
where
    T: ToString,
{
    fn to_csv_string(self) -> String {
        self.unwrap_or(Vec::new())
            .iter()
            .map(|op| op.to_string())
            .collect::<Vec<String>>()
            .join(", ")
    }
}

pub(crate) trait SelfLoggingError<T: ReadWrite, U> {
    fn log_error(self, client: &Client<T>) -> Self;
}

impl<T: ReadWrite, U> SelfLoggingError<T, U> for kmip_protocol::client::Result<U> {
    fn log_error(self, client: &Client<T>) -> Self {
        if let Err(err) = &self {
            error!(
                "{}: [req: {:?}, res: {:?}]",
                err,
                client.last_req_diag_str(),
                client.last_res_diag_str()
            );
        }
        self
    }
}