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
impl GetInfoResponse
Sourcepub fn from_message(message: &ControlMessage) -> Result<Self, Error>
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:
Error::InvalidArguments: One or more requested keys were not recognized by TorError::OperationFailed: Tor returned an error codeError::Protocol: The response format was invalid (missing=separator, malformed multi-line value, etc.)
§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()));Sourcepub fn assert_matches(&self, params: &HashSet<String>) -> Result<(), Error>
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());Sourcepub fn get_str(&self, key: &str) -> Option<String>
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
impl Clone for GetInfoResponse
Source§fn clone(&self) -> GetInfoResponse
fn clone(&self) -> GetInfoResponse
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more