blob: b0aaec81c06dd0a60c91f8e16fe01549dde8d3c6 [file] [log] [blame]
//! `ShellParams` protocol
use crate::proto::unsafe_protocol;
use crate::{data_types, Char16};
use core::slice::from_raw_parts;
use uefi_raw::protocol::shell_params::ShellParametersProtocol;
use crate::CStr16;
/// The ShellParameters protocol.
#[derive(Debug)]
#[repr(transparent)]
#[unsafe_protocol(ShellParametersProtocol::GUID)]
pub struct ShellParameters(ShellParametersProtocol);
impl ShellParameters {
/// Get the number of shell parameter arguments
#[must_use]
pub const fn args_len(&self) -> usize {
self.0.argc
}
/// Get an iterator of the shell parameter arguments
pub fn args(&self) -> impl Iterator<Item = &CStr16> {
self.args_slice()
.iter()
.map(|x| unsafe { CStr16::from_ptr(*x) })
}
/// Get a slice of the args, as Char16 pointers
#[must_use]
const fn args_slice(&self) -> &[*const Char16] {
unsafe {
from_raw_parts(
self.0.argv.cast::<*const data_types::chars::Char16>(),
self.0.argc,
)
}
}
}