You are an expert in writing code in many different languages. Your goal is to perform code completion for the following code, keeping in mind the rest of the code and the file meta data.
    Metadata details:
    filename: ldap_server.rs
    path of file: ./repos/lldap/server/src/infra
    
    the code of the file until where you have to start completion: use crate::{
    domain::{
        handler::{BackendHandler, LoginHandler},
        opaque_handler::OpaqueHandler,
        types::AttributeName,
    },
    infra::{
        access_control::AccessControlledBackendHandler,
        configuration::{Configuration, LdapsOptions},
        ldap_handler::LdapHandler,
    },
};
use actix_rt::net::TcpStream;
use actix_server::ServerBuilder;
use actix_service::{fn_service, ServiceFactoryExt};
use anyhow::{anyhow, Context, Result};
use ldap3_proto::{control::LdapControl, proto::LdapMsg, proto::LdapOp, LdapCodec};
use rustls::PrivateKey;
use tokio_rustls::TlsAcceptor
    
fn read_private_key(key_file: &str) -> Result<PrivateKey> {
    use rustls_pemfile::{ec_private_keys, pkcs8_private_keys, rsa_private_keys};
    use std::{fs::File, io::BufReader};
    pkcs8_private_keys(&mut BufReader::new(File::open(key_file)?))
        .map_err(anyhow::Error::from)
        .and_then(|keys| {
            keys.into_iter()
                .next()
                .ok_or_else(|| anyhow!("No PKCS8 key"))
        })
        .or_else(|_| {
            rsa_private_keys(&mut BufReader::new(File::open(key_file)?))
                .map_err(anyhow::Error::from)
                .and_then(|keys| {
                    keys.into_iter()
                        .next()
                        .ok_or_else(|| anyhow!("No PKCS1 key"))
                })
        })
        .or_else(|_| {
            ec_private_keys(&mut BufReader::new(File::open(key_file)?))
                .map_err(anyhow::Error::from)
                .and_then(|keys| keys.into_iter().next().ok_or_else(|| anyhow!("No EC key")))
        })
        .with_context(|| {
            format!(
                "Cannot read either PKCS1, PKCS8 or EC private key from {}",
                key_file
            )
        })
        .map(rustls::PrivateKey)
}