Module version

Module version 

Source
Expand description

Tor version parsing and comparison.

This module provides functionality for parsing and comparing Tor version strings. Tor versions follow the format specified in the Tor version-spec: major.minor.micro[.patch][-status][ (extra)]

§Conceptual Role

The Version type enables:

  • Parsing version strings from Tor’s GETINFO responses
  • Comparing versions to check feature availability
  • Determining if a Tor instance meets minimum requirements

§Version Format

A Tor version string consists of:

  • major: Major version number (required)
  • minor: Minor version number (required)
  • micro: Micro version number (required)
  • patch: Patch level (optional, defaults to 0 for comparison)
  • status: Release status tag like “alpha”, “beta”, “rc”, “dev” (optional)
  • extra: Additional info like git commit (parsed but not stored)

§Comparison Semantics

Versions are compared component by component:

  1. Major, minor, micro, patch are compared numerically
  2. Missing patch is treated as 0
  3. Status tags are compared by release priority:
    • dev < alpha < beta < rc < (no status/release)
    • Unknown status tags are treated as release versions

§Example

use stem_rs::Version;

// Parse version strings
let v1 = Version::parse("0.4.7.1-alpha").unwrap();
let v2 = Version::parse("0.4.7.1").unwrap();

// Alpha versions are less than release versions
assert!(v1 < v2);

// Compare against minimum requirements
let minimum = Version::new(0, 4, 5);
assert!(v1 > minimum);

// Build versions programmatically
let v3 = Version::new(0, 4, 8)
    .with_patch(1)
    .with_status("beta");
assert_eq!(v3.to_string(), "0.4.8.1-beta");

§See Also

Structs§

Version
A parsed Tor version with comparison support.