GetInfoResponse

Struct GetInfoResponse 

Source
pub struct GetInfoResponse {
    pub entries: HashMap<String, Vec<u8>>,
}
Expand description

Parsed response from the GETINFO command.

Contains a mapping of information keys to their byte values. Values are stored as bytes to support binary data like descriptors.

§Example

use stem_rs::response::{ControlMessage, GetInfoResponse};

let msg = ControlMessage::from_str(
    "250-version=0.4.7.1\r\n\
     250-fingerprint=ABCD1234\r\n\
     250 OK\r\n",
    None,
    false
).unwrap();

let response = GetInfoResponse::from_message(&msg).unwrap();

// Use get_str for string values
assert_eq!(response.get_str("version"), Some("0.4.7.1".to_string()));

// Or access raw bytes directly
assert_eq!(response.entries.get("fingerprint"), Some(&b"ABCD1234".to_vec()));

Fields§

§entries: HashMap<String, Vec<u8>>

Mapping of information keys to their byte values.

Values are stored as raw bytes to support binary data. Use get_str for convenient string access.

Implementations§

Source§

impl GetInfoResponse

Source

pub fn from_message(message: &ControlMessage) -> Result<Self, Error>

Parses a GETINFO response from a control message.

Extracts information keys and their values from the response. Multi-line values (indicated by + divider) are handled automatically.

§Arguments
  • message - The control message to parse
§Errors

Returns an error if:

§Example
use stem_rs::response::{ControlMessage, GetInfoResponse};

let msg = ControlMessage::from_str(
    "250-version=0.4.7.1\r\n250 OK\r\n",
    None,
    false
).unwrap();
let response = GetInfoResponse::from_message(&msg).unwrap();
assert_eq!(response.get_str("version"), Some("0.4.7.1".to_string()));
Source

pub fn assert_matches(&self, params: &HashSet<String>) -> Result<(), Error>

Verifies that the response contains exactly the requested parameters.

This is useful for ensuring the response matches what was requested, catching protocol errors where Tor returns different keys than expected.

§Arguments
  • params - Set of parameter names that were requested
§Errors

Returns Error::Protocol if the response keys don’t exactly match the requested parameters.

§Example
use std::collections::HashSet;
use stem_rs::response::{ControlMessage, GetInfoResponse};

let msg = ControlMessage::from_str(
    "250-version=0.4.7.1\r\n250 OK\r\n",
    None,
    false
).unwrap();
let response = GetInfoResponse::from_message(&msg).unwrap();

// Matches what we requested
let mut expected = HashSet::new();
expected.insert("version".to_string());
assert!(response.assert_matches(&expected).is_ok());

// Doesn't match
let mut wrong = HashSet::new();
wrong.insert("address".to_string());
assert!(response.assert_matches(&wrong).is_err());
Source

pub fn get_str(&self, key: &str) -> Option<String>

Gets a value as a UTF-8 string.

Convenience method for accessing string values. Invalid UTF-8 sequences are replaced with the Unicode replacement character (U+FFFD).

§Arguments
  • key - The information key to retrieve
§Returns

Some(String) if the key exists, None otherwise.

§Example
use stem_rs::response::{ControlMessage, GetInfoResponse};

let msg = ControlMessage::from_str(
    "250-version=0.4.7.1\r\n250 OK\r\n",
    None,
    false
).unwrap();
let response = GetInfoResponse::from_message(&msg).unwrap();

assert_eq!(response.get_str("version"), Some("0.4.7.1".to_string()));
assert_eq!(response.get_str("nonexistent"), None);

Trait Implementations§

Source§

impl Clone for GetInfoResponse

Source§

fn clone(&self) -> GetInfoResponse

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for GetInfoResponse

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.