iscsi-client-rs 0.0.6

A pure-Rust iSCSI initiator library and CLI
Documentation
// SPDX-License-Identifier: AGPL-3.0-or-later
// Copyright (C) 2012-2025 Andrei Maltsev

use std::collections::HashMap;

use once_cell::sync::Lazy;

use crate::models::data::asc_ascq_gen::ASC_ASCQ;

mod asc_ascq_gen;
pub mod common;
pub mod request;
pub mod response;
pub mod sense_data;

pub struct Entry {
    code: usize,
    desc: &'static str,
}

impl Entry {
    #[inline]
    pub fn lookup(asc: u8, ascq: u8) -> Option<&'static str> {
        let k = ((asc as u16) << 8) | (ascq as u16);
        ASC_ASCQ_MAP.get(&k).copied()
    }
}

static ASC_ASCQ_MAP: Lazy<HashMap<u16, &'static str>> = Lazy::new(|| {
    let mut m: HashMap<u16, &'static str> = HashMap::with_capacity(ASC_ASCQ.len());
    for e in ASC_ASCQ {
        let code = e.code as u16;
        match m.get(&code) {
            Some(cur) => {
                if e.desc.len() < cur.len() {
                    m.insert(code, e.desc);
                }
            },
            None => {
                m.insert(code, e.desc);
            },
        }
    }
    m
});