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: lib.rs
    path of file: ./repos/erooster/crates/erooster_imap/src
    
    the code of the file until where you have to start completion: // SPDX-FileCopyrightText: 2023 MTRNord
//
// SPDX-License-Identifier: Apache-2.0

//! Erooster IMAP Mail Server
//!
//! Erooster is a rust native imap server build on modern solutions.
//! The goal being easy to setup, use and maintain for smaller mail servers
//! while being also fast and efficient.
//!
//! This crate is containing the imap logic of the erooster mail server.
//!
#![feature(string_remove_matches)]
#![feature(box_into_inner)]
#![cfg_attr(coverage_nightly, feature(coverage_attribute))]
#![deny(unsafe_code, clippy::unwrap_used)]
#![warn(
    clippy::cognitive_complexity,
    clippy::branches_sharing_code,
    clippy::imprecise_flops,
    clippy::missing_const_for_fn,
    clippy::mutex_integer,
    clippy::path_buf_push_overw
    
pub fn start(config: Config, database: &DB, storage: &Storage) -> color_eyre::eyre::Result<()> {
    std::fs::create_dir_all(&config.mail.maildir_folders)?;

    let db_clone = database.clone();
    let storage_clone = storage.clone();
    let config_clone = config.clone();
    tokio::spawn(async move {
        if let Err(e) =
            servers::unencrypted::Unencrypted::run(config_clone, &db_clone, &storage_clone).await
        {
            panic!("Unable to start server: {e:?}");
        }
    });
    let db_clone = database.clone();
    let config = config.clone();
    let storage_clone = storage.clone();
    tokio::spawn(async move {
        if let Err(e) = servers::encrypted::Encrypted::run(config, &db_clone, &storage_clone).await
        {
            panic!("Unable to start TLS server: {e:?}");
        }
    });
    Ok(())
}