CodeSampleX

샘플

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 alpine/x64 · docker에서 contract를 실행해…

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

컨트랙트

  1. parse a version and a requirement
  2. assert a version inside the caret range matches
  3. assert the next major does not
  4. assert a prerelease is excluded from a plain requirement

파일

  • Cargo.lock
  • Cargo.toml
  • csx.json
  • src/main.rs

소스 아티팩트 내려받기 (tar.gz)

소스

Cargo.lock
# 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"
Cargo.toml
[package]
name = "csx-sample-semver"
version = "1.0.0"
edition = "2021"
license = "MIT-0"

[dependencies]
semver = "1.0.28"
csx.json
{"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"}
src/main.rs
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");
}

오리진 시더

anonymous