trz_gateway_common/x509/
stack.rs1use nameth::NamedEnumValues as _;
2use nameth::nameth;
3use openssl::error::ErrorStack;
4use openssl::stack::Stack;
5use openssl::stack::Stackable;
6
7pub fn make_stack<T: Stackable>(
10 items: impl Iterator<Item = T>,
11) -> Result<Stack<T>, MakeStackError> {
12 let mut stack = Stack::new().map_err(MakeStackError::New)?;
13 for item in items {
14 stack.push(item).map_err(MakeStackError::Push)?;
15 }
16 Ok(stack)
17}
18
19#[nameth]
20#[derive(thiserror::Error, Debug)]
21pub enum MakeStackError {
22 #[error("[{n}] {0}", n = self.name())]
23 New(ErrorStack),
24
25 #[error("[{n}] {0}", n = self.name())]
26 Push(ErrorStack),
27}