diff --git a/src/bpf.rs b/src/bpf.rs index e4221de3..00439a1f 100644 --- a/src/bpf.rs +++ b/src/bpf.rs @@ -1,6 +1,7 @@ use std::{ cell::{Ref, RefCell, RefMut}, collections::HashMap, + convert::TryFrom, }; use thiserror::Error; @@ -100,12 +101,24 @@ impl Bpf { }) } - pub fn map(&self, name: &str) -> Option> { - self.maps.get(name).map(|cell| cell.borrow()) - } - - pub fn map_mut(&self, name: &str) -> Option> { - self.maps.get(name).map(|cell| cell.borrow_mut()) + pub fn map<'a, 'slf: 'a, T: TryFrom>>( + &'slf self, + name: &str, + ) -> Result, >>::Error> { + self.maps + .get(name) + .map(|cell| T::try_from(cell.borrow())) + .transpose() + } + + pub fn map_mut<'a, 'slf: 'a, T: TryFrom>>( + &'slf self, + name: &str, + ) -> Result, >>::Error> { + self.maps + .get(name) + .map(|cell| T::try_from(cell.borrow_mut())) + .transpose() } pub fn program(&self, name: &str) -> Option<&Program> { diff --git a/src/programs/trace_point.rs b/src/programs/trace_point.rs index d7f2fe60..474edd2a 100644 --- a/src/programs/trace_point.rs +++ b/src/programs/trace_point.rs @@ -1,4 +1,4 @@ -use std::fs; +use std::{convert::TryFrom, fs}; use crate::{ generated::bpf_prog_type::BPF_PROG_TYPE_TRACEPOINT, syscalls::perf_event_open_trace_point,