meadow 0.4.0

Robotics-focused middleware for embedded Linux
Documentation
mod active;
mod idle;
mod subscription;

use std::fs::File;
use std::io::BufReader;
use std::net::SocketAddr;
use std::path::PathBuf;

use crate::error::Quic::*;
use crate::prelude::*;

use quinn::ClientConfig;
use rustls::Certificate;

use tracing::*;

pub fn generate_client_config_from_certs(
    cert_path: Option<PathBuf>,
) -> Result<ClientConfig, Error> {
    let mut certs = rustls::RootCertStore::empty();

    let path = match cert_path {
        Some(path) => path,
        None => return Err(Error::Quic(NoProvidedCertPath)),
    };

    let f = File::open(path)?;
    let mut cert_chain_reader = BufReader::new(f);
    let server_certs: Vec<Certificate> = rustls_pemfile::certs(&mut cert_chain_reader)
        .unwrap()
        .into_iter()
        .map(rustls::Certificate)
        .collect();
    for cert in server_certs {
        if let Err(e) = certs.add(&cert) {
            error!("Error adding certificate: {:?}", e);
            return Err(Error::Quic(Webpki));
        }
    }

    Ok(ClientConfig::with_root_certificates(certs))
}