Пример
serde_json 1.0.151: Serialize and deserialize a struct as JSON with serde in Rust
Проверенный пример — cargo serde_json 1.0.151: Serialize and deserialize a struct as JSON with serde in Rust. Контракт выполнен на rust 1 · linux alpine/x64…
sha256:84ec319af14787a23f24200632d3cff0015b1c04e3f4838979bf83d795318e50
Эта сеть предлагает одно: образец, который собирается. Она запустила его в песочнице и сохранила подписанную квитанцию. Она ничего не оценивает и ничего не гарантирует — собирается ли тот же код у вас, она не измеряла.
Сколько различных ключей подписи подали пройденную квитанцию контракта. Один — только автор; больше одного — значит, кто-то ещё тоже собрал. Ключ создаётся сам и не имеет зарегистрированной личности, поэтому считаются ключи, а не люди.
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- Цель
- Serialize and deserialize a struct as JSON with serde in Rust
- Пакеты
- Символы
-
- serde_json::to_string
- serde_json::from_str
- Deserialize
- Окружение
- rust 1
- Создан
- 2026-08-13T15:48:13Z
Контракт
- derive Serialize and Deserialize on a struct
- assert a struct round-trips through JSON unchanged
- assert a missing optional field defaults instead of failing
- assert a type mismatch produces an error rather than a panic
Файлы
- 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-serde"
version = "1.0.0"
dependencies = [
"serde",
"serde_json",
]
[[package]]
name = "itoa"
version = "1.0.18"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8f42a60cbdf9a97f5d2305f08a87dc4e09308d1276d28c869c684d7777685682"
[[package]]
name = "memchr"
version = "2.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf8baf1c55e62ffcace7a9f06f4bd9cd3f0c4beb022d3b367256b91b87513d98"
[[package]]
name = "proc-macro2"
version = "1.0.107"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "985e7ec9bb745e6ce6535b544d84d6cd6f7ad8bd711c398938ae983b91a766d9"
dependencies = [
"unicode-ident",
]
[[package]]
name = "quote"
version = "1.0.47"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1fbf4db142a473a8d80c26bbf18454ed458bf8d26c8219c331daecfdbd079001"
dependencies = [
"proc-macro2",
]
[[package]]
name = "serde"
version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4148590afebada386688f18773da617792bf2ef03ffc1e4cbd2b1d45b023e0ba"
dependencies = [
"serde_core",
"serde_derive",
]
[[package]]
name = "serde_core"
version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "67dca2c9c51e58a4791a4b1ed58308b39c64224d349a935ab5039aa360942a48"
dependencies = [
"serde_derive",
]
[[package]]
name = "serde_derive"
version = "1.0.229"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e7a5d71263a5a7d47b41f6b3f06ba276f10cc18b0931f1799f710578e2309348"
dependencies = [
"proc-macro2",
"quote",
"syn",
]
[[package]]
name = "serde_json"
version = "1.0.151"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c841b55ecdae098c80dcae9cf767f6f8a0c2cdb3416bbef72181df4d0fe73f14"
dependencies = [
"itoa",
"memchr",
"serde",
"serde_core",
"zmij",
]
[[package]]
name = "syn"
version = "3.0.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "53e9bae58849f64dfa4f5d5ae372c8341f7305f82a3868709269343628b659a3"
dependencies = [
"proc-macro2",
"quote",
"unicode-ident",
]
[[package]]
name = "unicode-ident"
version = "1.0.24"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6e4313cd5fcd3dad5cafa179702e2b244f760991f45397d14d4ebf38247da75"
[[package]]
name = "zmij"
version = "1.0.23"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "29666d0abbfad1e3dc4dcf6144730dd3a3ab225bbbdac83319345b1b44ccfc1b"
[package]
name = "csx-sample-serde"
version = "1.0.0"
edition = "2021"
license = "MIT-0"
[dependencies]
serde = { version = "1.0.229", features = ["derive"] }
serde_json = "1.0.151"
{"case":{"caseId":"case:sha256:afdc13bd2d5b2abd3c3d35e48c93cba270ab7104369f9ef9911d2cd864d7997c","constraints":{"runtime":"rust"},"contract":["derive Serialize and Deserialize on a struct","assert a struct round-trips through JSON unchanged","assert a missing optional field defaults instead of failing","assert a type mismatch produces an error rather than a panic"],"goal":"Serialize and deserialize a struct as JSON with serde in Rust","kind":"HOW","packages":["pkg:cargo/serde_json@1.0.151"],"schemaVersion":1,"symbols":["serde_json::to_string","serde_json::from_str","Deserialize"]},"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/serde_json@1.0.151"],"schemaVersion":1,"symbols":["serde_json::to_string","serde_json::from_str","Deserialize"],"verifierAdapter":"cargo@1"}
use serde::{Deserialize, Serialize};
/// The derive macros live behind serde's "derive" feature. Depending on
/// serde without it is the usual cause of "cannot find derive macro
/// `Serialize`" — the crate is present, the macro is not.
#[derive(Serialize, Deserialize, Debug, PartialEq)]
struct Peer {
peer_id: String,
port: u16,
/// Absent in the input rather than null: serde needs the default, or
/// deserialization fails with "missing field".
#[serde(default)]
tags: Vec<String>,
}
fn main() {
let peer = Peer {
peer_id: "ed25519:abc".to_string(),
port: 48620,
tags: vec!["blob".to_string()],
};
let text = serde_json::to_string(&peer).expect("serializes");
let back: Peer = serde_json::from_str(&text).expect("deserializes");
assert_eq!(peer, back);
// A missing field with #[serde(default)] is filled in, not an error.
let partial: Peer =
serde_json::from_str(r#"{"peer_id":"ed25519:def","port":1}"#).expect("defaults apply");
assert_eq!(partial.tags, Vec::<String>::new());
// A type mismatch is a Result, never a panic.
let wrong = serde_json::from_str::<Peer>(r#"{"peer_id":"x","port":"not-a-number"}"#);
assert!(wrong.is_err());
println!("CONTRACT PASS: serde round-tripped JSON, applied defaults and reported errors");
}