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/rivet/lib/runtime/src
    
    the code of the file until where you have to start completion: use std::{env, future::Future, sync::Once, time::Duration};
use thiserror::Error;
use tracing_subscriber::prelude::*;

mod metrics;

static SETUP_TRACING: Once = Once::new();

#[derive(Error, Debug)]
pub enum Error {
	#[error("parse int: {0}")]
	ParseInt(#[from] std::num::ParseIntError),

	#[error("build tokio runtime: {0}")]
	BuildTokioRuntime(std::io::Error),
}

#[derive(Default)]
pub struct RunConfig {
	pub customize_tokio_runtime: Option<Box<dyn FnOnce(&mut tokio::runtime::Builder) -> ()>>,
	pub pretty_logs: bool,
}

impl RunConfig {
	pub fn run<F: Future>(self, f: F) -> Result<F::Output, Error> {
		self.setup_tracing();

		// Build runtime
		let mut rt_builder = self.build_tokio_runtime_builder()?;
		if let Some(customize) = self.customize_tokio_runtime {
			customize(&mut rt_builder);
		}

		// Run future
		let rt = rt_builder.build().map_err(Error::BuildTokioRuntime)?;
		let output = rt.block_on(f);

		Ok(output)
	}

	fn setup_t
    
	fn setup_tracing(&self) {
		SETUP_TRACING.call_once(|| {
			if self.pretty_logs {
				// Pretty print
				tracing_subscriber::fmt()
					.pretty()
					.with_max_level(tracing::Level::INFO)
					.init();
			} else {
				let fmt_filter = tracing_subscriber::filter::LevelFilter::INFO;

				if std::env::var("TOKIO_CONSOLE_ENABLE").is_ok() {
					// JSON + tokio-console
					let console_layer = console_subscriber::ConsoleLayer::builder()
						.retention(std::time::Duration::from_secs(60))
						.with_default_env()
						.spawn();

					let fmt_layer = tracing_subscriber::fmt::layer()
						.json()
						.with_span_events(tracing_subscriber::fmt::format::FmtSpan::NONE)
						.with_current_span(false)
						.with_span_list(true)
						.with_filter(fmt_filter);

					tracing_subscriber::registry()
						.with(console_layer)
						.with(fmt_layer)
						.init();
				} else {
					// JSON
					let fmt_layer = tracing_subscriber::fmt::layer()
						.json()
						.with_span_events(tracing_subscriber::fmt::format::FmtSpan::NONE)
						.with_current_span(false)
						.with_span_list(true)
						.with_filter(fmt_filter);

					tracing_subscriber::registry().with(fmt_layer).init();
				}
			}
		})
	}