From a92bfebf50df2c56bca242c6a9c3dedd04135675 Mon Sep 17 00:00:00 2001 From: Alessandro Decina Date: Tue, 2 Mar 2021 08:39:43 +0000 Subject: [PATCH] aya: remove TryInto magic from program()/program_mut() too For programs it's actually useful being able to get the underlying Program enum, for example when iterating/loading all the programs --- aya/src/bpf.rs | 22 ++++++++++------------ aya/src/programs/mod.rs | 3 +++ 2 files changed, 13 insertions(+), 12 deletions(-) diff --git a/aya/src/bpf.rs b/aya/src/bpf.rs index 9fc791dd..949f2133 100644 --- a/aya/src/bpf.rs +++ b/aya/src/bpf.rs @@ -1,6 +1,5 @@ use std::{ collections::HashMap, - convert::TryFrom, error::Error, fs, io, path::{Path, PathBuf}, @@ -185,21 +184,20 @@ impl Bpf { ret } - pub fn program<'a, T: TryFrom<&'a Program>>( - &'a self, - name: &str, - ) -> Result, >::Error> { - self.programs.get(name).map(|p| T::try_from(p)).transpose() + pub fn program(&self, name: &str) -> Result<&Program, ProgramError> { + self.programs + .get(name) + .ok_or_else(|| ProgramError::NotFound { + name: name.to_owned(), + }) } - pub fn program_mut<'a, T: TryFrom<&'a mut Program>>( - &'a mut self, - name: &str, - ) -> Result, >::Error> { + pub fn program_mut(&mut self, name: &str) -> Result<&mut Program, ProgramError> { self.programs .get_mut(name) - .map(|p| T::try_from(p)) - .transpose() + .ok_or_else(|| ProgramError::NotFound { + name: name.to_owned(), + }) } pub fn programs(&self) -> impl Iterator { diff --git a/aya/src/programs/mod.rs b/aya/src/programs/mod.rs index d9b69983..7e6f76cc 100644 --- a/aya/src/programs/mod.rs +++ b/aya/src/programs/mod.rs @@ -21,6 +21,9 @@ use crate::{ }; #[derive(Debug, Error)] pub enum ProgramError { + #[error("program `{name}` not found")] + NotFound { name: String }, + #[error("the program is already loaded")] AlreadyLoaded,