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: named_data.rs
    path of file: ./repos/CYFS/src/service/ood-daemon/src/repo
    
    the code of the file until where you have to start completion: use super::manager::{Repo, RepoPackageInfo, RepoType};
use cyfs_base::{BuckyError, BuckyErrorCode, BuckyResult, DirId};
use cyfs_client::{NamedCacheClient, NamedCacheClientConfig};

use async_std::fs::File;
use async_std::io::prelude::*;
use async_trait::async_trait;
use once_cell::sync::OnceCell;
us
    
    pub async fn init(&self) -> BuckyResult<()> {
        // service desc确保它有固定外网地址，连接不走sn。这里sn_list就可以传None
        let mut config = NamedCacheClientConfig::default();
        config.retry_times = 1;
        config.timeout = Duration::from_secs(15 * 60);
        config.tcp_file_manager_port = 5312;
        config.tcp_chunk_manager_port = 5310;
        config.conn_strategy = cyfs_client::ConnStrategy::TcpFirst;
        let mut client = NamedCacheClient::new(config);
        if let Err(e) = client.init().await {
            let msg = format!("init named cache client for repo failed! err={}", e);
            error!("{}", msg);

            return Err(BuckyError::new(e.code(), msg));
        }

        if let Err(_) = self.client.set(Arc::new(client)) {
            unreachable!("init should not call twice!");
        }

        Ok(())
    }