feat(lib): reserve client minor versions 1 (unidentified) and 2 (reference client)

Document the minor-version registry on ClientVersion: within the
soulseek-rs major (176), minor 1 stays the library default for
unidentified consumers and minor 2 is now the reference CLI/TUI client.
Downstream clients reserve their own minor via issue #12.
This commit is contained in:
Michel de Graaf
2026-08-17 09:46:06 +02:00
parent 1833717521
commit ac06cb9a5a
2 changed files with 18 additions and 5 deletions
+3 -2
View File
@@ -171,8 +171,9 @@ pub struct ClientSettings {
/// Empty means nothing is shared.
pub shared_directories: Vec<String>,
/// The version reported to the server on login. Defaults to the
/// soulseek-rs major version with minor version 1; clients and bots built
/// on this library should pick their own minor version.
/// soulseek-rs major version with minor version 1 ("unidentified");
/// clients and bots built on this library should reserve their own minor
/// version (see [`ClientVersion`]).
pub version: ClientVersion,
}
+15 -3
View File
@@ -15,6 +15,18 @@ pub struct File {
/// Major versions identify client projects on the Soulseek network and are
/// reserved per project for the project's lifetime:
/// <https://nicotine-plus.org/doc/SLSKPROTOCOL.html#major-versions>.
///
/// Within the soulseek-rs major, minor versions identify the individual
/// clients built on this library. Reserved minors:
///
/// | Minor | Client |
/// |-------|-----------------------------------------------|
/// | 1 | unidentified (library default) |
/// | 2 | soulseek-rs reference client (CLI/TUI) |
///
/// Building on this library? Keep [`ClientVersion::MAJOR`] and pick an
/// unused minor for your client by opening an issue:
/// <https://github.com/michel/soulseek-rs/issues/12>.
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub struct ClientVersion {
pub major: u32,
@@ -23,14 +35,14 @@ pub struct ClientVersion {
impl ClientVersion {
/// The major version reserved for the soulseek-rs project. Clients and
/// bots built on this library keep this major and pick their own non-zero
/// minor version.
/// bots built on this library keep this major and pick their own
/// reserved minor version (see the table on [`ClientVersion`]).
pub const MAJOR: u32 = 176;
/// The version the soulseek-rs reference client (CLI/TUI) logs in with.
pub const REFERENCE_CLIENT: Self = Self {
major: Self::MAJOR,
minor: 100,
minor: 2,
};
}