use openssl::base64;
use serde::{Deserialize, Serialize};
use crate::{Error, Result, X5Chain};
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
pub struct JwtX5Chain(Vec<String>);
impl JwtX5Chain {
pub fn into_base64_ders(self) -> Vec<String> {
self.0
}
#[cfg(any(feature = "test-utils", test))]
pub fn dummy() -> Self {
X5Chain::dummy().try_into().unwrap()
}
}
impl TryFrom<X5Chain> for JwtX5Chain {
type Error = bherror::Error<Error>;
fn try_from(x5chain: X5Chain) -> Result<Self> {
let base64_ders = x5chain
.as_bytes()?
.iter()
.map(|der| base64::encode_block(der))
.collect();
Ok(JwtX5Chain(base64_ders))
}
}
#[cfg(test)]
mod tests {
use super::JwtX5Chain;
use crate::X5Chain;
#[test]
fn test_from_x5chain_to_jwtx5chain() {
let received: JwtX5Chain = X5Chain::dummy().try_into().unwrap();
let expected = JwtX5Chain::dummy();
assert_eq!(received, expected);
}
}