Пример
semver 1.0.28: Check a version against a caret requirement with the semver crate in Rust
Проверенный пример — cargo semver 1.0.28: Check a version against a caret requirement with the semver crate in Rust. Контракт выполнен на rust 1 · linux…
sha256:c191ec9b36048a433bed234d5c9bf24b677fdf4fc021f0c226ccf6e0e850be06
Эта сеть предлагает одно: образец, который собирается. Она запустила его в песочнице и сохранила подписанную квитанцию. Она ничего не оценивает и ничего не гарантирует — собирается ли тот же код у вас, она не измеряла.
Сколько различных ключей подписи подали пройденную квитанцию контракта. Один — только автор; больше одного — значит, кто-то ещё тоже собрал. Ключ создаётся сам и не имеет зарегистрированной личности, поэтому считаются ключи, а не люди.
MIT-0
Свидетельства выполнения
Заявленное окружение и подписанные запуски разделены, чтобы вы точно видели, что этот образец запускал и где.
- Основа свидетельства
- Подписанный контракт пройден
- Квитанции проверки
- 3
- Ключи подписи, собравшие его
- 3
Заявленная среда
rust 1 linux x64 rust 1 rust cargo
Среды запусков проверки
| Окружение | Контракт | Этапы | Запуск |
|---|---|---|---|
| rust 1 · linux alpine/x64 · docker ed25519:a2ec939a4c60e243 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · cargo@1 |
2026-08-13 |
| rust 1 · linux alpine/x64 · docker ed25519:d91480838ac982c9 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · cargo@1 |
2026-08-17 |
| rust 1 · linux alpine/x64 · docker ed25519:c1973797be207ac4 | PASS | compile:SKIPPED · contract:PASS · load:PASS · resolve:PASS CONTAINER_RUN · cargo@1rust:1-alpine@sha256:a10e64dd139b… |
2026-09-08 |
Кейс
HOW- Цель
- Check a version against a caret requirement with the semver crate in Rust
- Пакеты
- Символы
-
- Version::parse
- VersionReq::matches
- Окружение
- rust 1
- Создан
- 2026-08-13T15:47:40Z
Контракт
- parse a version and a requirement
- assert a version inside the caret range matches
- assert the next major does not
- assert a prerelease is excluded from a plain requirement
Файлы
- Cargo.lock
- Cargo.toml
- csx.json
- src/main.rs
Исходный код
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 4
[[package]]
name = "csx-sample-semver"
version = "1.0.0"
dependencies = [
"semver",
]
[[package]]
name = "semver"
version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
[package]
name = "csx-sample-semver"
version = "1.0.0"
edition = "2021"
license = "MIT-0"
[dependencies]
semver = "1.0.28"
{"case":{"caseId":"case:sha256:890d32e844db56240a414a1479cbe98efa06b4e4f94f1545a296faa55f042f53","constraints":{"runtime":"rust"},"contract":["parse a version and a requirement","assert a version inside the caret range matches","assert the next major does not","assert a prerelease is excluded from a plain requirement"],"goal":"Check a version against a caret requirement with the semver crate in Rust","kind":"HOW","packages":["pkg:cargo/semver@1.0.28"],"schemaVersion":1,"symbols":["Version::parse","VersionReq::matches"]},"contractCommand":["cargo","run","--offline","--quiet"],"environment":{"arch":"x64","ecosystem":"cargo","executionContext":"rust","language":"rust","os":"linux","packageManager":"cargo","runtime":"rust","runtimeVersion":"1","schemaVersion":1},"license":"MIT-0","packages":["pkg:cargo/semver@1.0.28"],"schemaVersion":1,"symbols":["Version::parse","VersionReq::matches"],"verifierAdapter":"cargo@1"}
use semver::{Version, VersionReq};
/// Reports whether `version` satisfies `req`.
///
/// Two rules bite here. A prerelease is excluded from an ordinary
/// requirement even when it falls numerically inside it, so "1.13.0-beta.1"
/// fails "^1.0". And `^0.x` is far narrower than `^1.x`: for a 0.y.z crate
/// the MINOR version is the breaking one, so "^0.3" excludes 0.4.
fn fits(version: &str, req: &str) -> bool {
let v = Version::parse(version).expect("version parses");
VersionReq::parse(req).expect("requirement parses").matches(&v)
}
fn main() {
assert!(fits("1.12.0", "^1.0"));
assert!(!fits("2.0.0", "^1.0"));
// Prereleases are excluded from a plain requirement.
assert!(!fits("1.13.0-beta.1", "^1.0"));
// Zero-major: the minor version is the breaking one.
assert!(fits("0.3.9", "^0.3"));
assert!(!fits("0.4.0", "^0.3"));
assert!(Version::parse("not-a-version").is_err());
println!("CONTRACT PASS: semver crate applied caret and prerelease rules");
}