1use std::{fs::File, io::BufReader, path::Path};
3
4use rustls::pki_types::CertificateDer;
5
6use crate::error::Error;
7
8pub fn load_ca<'a>(path: &Path) -> Result<CertificateDer<'a>, Error> {
13 let file = File::open(path)
14 .map_err(|err| Error::IoPathError(path.to_path_buf(), "opening cert", err))?;
15
16 let cert = rustls_pemfile::certs(&mut BufReader::new(file))
17 .collect::<Result<Vec<_>, std::io::Error>>()
18 .map_err(|_| Error::CertificateFailure("Failed to parse daemon certificate.".into()))?
19 .into_iter()
20 .next()
21 .ok_or_else(|| Error::CertificateFailure("Couldn't find CA certificate in file".into()))?;
22
23 Ok(cert)
24}