I want to find out the type of a variable in Rust:
use anyhow::Result;
use arti_client::{TorClient, TorClientConfig};
extern crate tokio;
#[tokio::main]
async fn main() -> Result<()> {
let config = TorClientConfig::default();
let tor_client = TorClient::create_bootstrapped(config).await?;
// What is the type of `tor_client`?
Ok(())
}
In order to find out the type of the variable tor_client, I used std::any::type_name:
use std::any::type_name;
fn type_of<T>(_: T) -> &'static str {
type_name::<T>()
}
[...]
println!("{}", type_of(tor_client));
The type printed to stdout is arti_client::client::TorClient<tor_rtcompat::PreferredRuntime>.
I naively assumed that I can now declare the variable with that explicit type annotation:
use anyhow::Result;
use arti_client::{TorClient, TorClientConfig};
extern crate tokio;
#[tokio::main]
async fn main() -> Result<()> {
let config = TorClientConfig::default();
let tor_client: arti_client::client::TorClient<tor_rtcompat::PreferredRuntime> =
TorClient::create_bootstrapped(config).await?;
Ok(())
}
However, the compiler absolutely does not like that:
error[E0603]: module `client` is private
--> src/main.rs:52:34
|
52 | let tor_client: arti_client::client::TorClient<tor_rtcompat::PreferredRuntime> =
| ^^^^^^ private module
|
note: the module `client` is defined here
--> /home/user/.cargo/registry/src/github.com-1ecc6299db9ec823/arti-client-0.3.0/src/lib.rs:220:1
|
220 | mod client;
| ^^^^^^^^^^^
error: aborting due to previous error
What do I do wrong? I assume that the arti_client::client module is private for a reason...
Background on why I want to find out the type and use explicit type annotation: I want to pass a reference to that variable to a custom function. As far as I understand it, I can not / should not declare a function parameter without knowing the type.