LCOV - code coverage report
Current view: top level - src/macho/commands - version_min.rs (source / functions) Coverage Total Hit
Test: lief.lcov Lines: 93.5 % 31 29
Test Date: 2024-11-30:00:00:00 Functions: 100.0 % 5 5

            Line data    Source code
       1              : use super::Command;
       2              : use lief_ffi as ffi;
       3              : use crate::common::FromFFI;
       4              : 
       5              : use std::marker::PhantomData;
       6              : 
       7              : /// Structure that wraps the `LC_VERSION_MIN_MACOSX, LC_VERSION_MIN_IPHONEOS, ...` commands.
       8              : pub struct VersionMin<'a> {
       9              :     ptr: cxx::UniquePtr<ffi::MachO_VersionMin>,
      10              :     _owner: PhantomData<&'a ffi::MachO_Binary>
      11              : }
      12              : 
      13              : impl VersionMin<'_> {
      14              :     /// Version as a tuplce
      15          160 :     pub fn version(&self) -> (u64, u64, u64) {
      16          160 :         let vec = Vec::from(self.ptr.version().as_slice());
      17          160 :         if vec.len() != 3 {
      18            0 :             return (0, 0, 0);
      19          160 :         }
      20          160 :         (vec[0], vec[1], vec[2])
      21          160 :     }
      22              : 
      23              :     /// SDK version as a tuple
      24          160 :     pub fn sdk(&self) -> (u64, u64, u64) {
      25          160 :         let vec = Vec::from(self.ptr.sdk().as_slice());
      26          160 :         if vec.len() != 3 {
      27            0 :             return (0, 0, 0);
      28          160 :         }
      29          160 :         (vec[0], vec[1], vec[2])
      30          160 :     }
      31              : }
      32              : 
      33              : impl std::fmt::Debug for VersionMin<'_> {
      34          160 :     fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result {
      35          160 :         let base = self as &dyn Command;
      36          160 :         f.debug_struct("VersionMin")
      37          160 :             .field("base", &base)
      38          160 :             .field("version", &self.version())
      39          160 :             .field("sdk", &self.sdk())
      40          160 :             .finish()
      41          160 :     }
      42              : }
      43              : 
      44              : impl FromFFI<ffi::MachO_VersionMin> for VersionMin<'_> {
      45          160 :     fn from_ffi(cmd: cxx::UniquePtr<ffi::MachO_VersionMin>) -> Self {
      46          160 :         Self {
      47          160 :             ptr: cmd,
      48          160 :             _owner: PhantomData
      49          160 :         }
      50          160 :     }
      51              : }
      52              : 
      53              : impl Command for VersionMin<'_> {
      54          640 :     fn get_base(&self) -> &ffi::MachO_Command {
      55          640 :         self.ptr.as_ref().unwrap().as_ref()
      56          640 :     }
      57              : }
        

Generated by: LCOV version 2.1-1