{"id":17922569,"url":"https://github.com/rreverser/serdebug","last_synced_at":"2025-04-04T23:08:20.087Z","repository":{"id":57666666,"uuid":"120027297","full_name":"RReverser/serdebug","owner":"RReverser","description":"Serde-based replacement for #[derive(Debug)]","archived":false,"fork":false,"pushed_at":"2024-09-30T22:12:20.000Z","size":44,"stargazers_count":65,"open_issues_count":0,"forks_count":2,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-28T22:13:12.942Z","etag":null,"topics":["debug","formatting","rust","rust-lang","serde","serialization"],"latest_commit_sha":null,"homepage":"https://crates.io/crates/serdebug","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RReverser.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-02-02T20:21:20.000Z","updated_at":"2024-12-16T14:01:20.000Z","dependencies_parsed_at":"2024-12-28T17:11:28.314Z","dependency_job_id":"ef579d50-1bb3-44be-a8d8-8b1ea6a28eea","html_url":"https://github.com/RReverser/serdebug","commit_stats":{"total_commits":27,"total_committers":1,"mean_commits":27.0,"dds":0.0,"last_synced_commit":"37569734af3987ce38e43fe28682f5e8c2d184b2"},"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RReverser%2Fserdebug","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RReverser%2Fserdebug/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RReverser%2Fserdebug/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RReverser%2Fserdebug/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RReverser","download_url":"https://codeload.github.com/RReverser/serdebug/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247261604,"owners_count":20910108,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["debug","formatting","rust","rust-lang","serde","serialization"],"created_at":"2024-10-28T20:39:48.525Z","updated_at":"2025-04-04T23:08:20.064Z","avatar_url":"https://github.com/RReverser.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# serdebug\n\n[![Crates.io](https://img.shields.io/crates/v/serdebug.svg)](https://crates.io/crates/serdebug)\n[![docs.rs](https://docs.rs/serdebug/badge.svg)](https://docs.rs/serdebug)\n\nThis is a drop-in replacement for `#[derive(Debug)]` that uses `serde::Serialize` under the hood to provide advanced control over output serialisation.\n\n## Usage\n\nBy default, the generated code will produce exactly same output as `#[derive(Debug)]` for compatibility.\n\nHowever, this might be not very interesting, so let's add some serde attributes to see how we can control debug representation:\n\n```rust\nuse serde::Serialize;\nuse serdebug::SerDebug;\n\npub struct CustomType(u32);\n\n#[derive(Serialize, SerDebug)]\npub enum MyEnum {\n    // renaming items works as expected\n    #[serde(rename = \"AAAAAAA!!!\")]\n    A,\n\n    B(u32),\n\n    C { flag: bool },\n}\n\n#[derive(Serialize, SerDebug)]\n// so does bulk rename on containers\n#[serde(rename_all = \"PascalCase\")]\npub struct MyStruct {\n    number: u32,\n\n    my_enum: Vec\u003cMyEnum\u003e,\n\n    // we might want to hide some items from the output\n    #[serde(skip_serializing)]\n    hidden: bool,\n\n    // or override serialisation for otherwise verbose wrappers or\n    // third-party types that don't implement `Debug` and/or `Serialize`\n    #[serde(serialize_with = \"custom_serialize\")]\n    custom_type: CustomType,\n}\n\nfn custom_serialize\u003cS: serde::Serializer\u003e(value: \u0026CustomType, ser: S) -\u003e Result\u003cS::Ok, S::Error\u003e {\n    value.0.serialize(ser)\n}\n\nfn main() {\n    let s = MyStruct {\n        number: 42,\n        my_enum: vec![MyEnum::A, MyEnum::B(10), MyEnum::C { flag: true }],\n        hidden: true,\n        custom_type: CustomType(20),\n    };\n\n    assert_eq!(format!(\"{s:#?}\"), \"\nMyStruct {\n    Number: 42,\n    MyEnum: [\n        AAAAAAA!!!,\n        B(\n            10,\n        ),\n        C {\n            flag: true,\n        },\n    ],\n    CustomType: 20,\n}\n\".trim());\n}\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frreverser%2Fserdebug","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frreverser%2Fserdebug","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frreverser%2Fserdebug/lists"}