pciutils 0.1.1

A clone of pciutils in Rust
Documentation
use crate::access::Access;
use crate::error::{Error, Result};
use std::fmt::Display;
use std::rc::Rc;

use super::Capability;

pub struct PowerManagementCapability {
    access: Rc<Box<dyn Access>>,
    offset: u8,
}

impl PowerManagementCapability {
    pub fn new(access: Rc<Box<dyn Access>>, offset: u8) -> Result<PowerManagementCapability> {
        Ok(PowerManagementCapability { access, offset })
    }
}

impl Capability for PowerManagementCapability {
    fn cap_string(&self, _verbosity: u8) -> Result<String> {
        Ok(format!(
            "Power Management version {}\n",
            self.access
                .read(self.offset as u64 + 2, 1)?
                .pop()
                .ok_or(Error::unknown_capability(0))?
                & 0x7
        )
        .trim()
        .to_string())
    }

    fn offset(&self) -> Result<u64> {
        Ok(self.offset.into())
    }
}

impl Display for PowerManagementCapability {
    fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
        write!(f, "{}", self.cap_string(0)?)
    }
}