crates.io docs

serde_typename

Conveniently serialize and deserialize rust types into / from their serde name.

Usage

```rust use serde::{Serialize, Deserialize}; use serdetypename::{tostr, from_str};

/// Enums

[derive(Debug, PartialEq, Serialize, Deserialize)]

enum Enum { UnitVariant, #[serde(rename = "RENAMED")] Renamed, HoldsData(u8), HoldsDataAsTuple(u8, u8), HoldsDataAsStruct { field: u8 } }

// Safe to serialize, held data gets discarded asserteq!(tostr(&Enum::UnitVariant).unwrap(), "UnitVariant"); asserteq!(tostr(&Enum::Renamed).unwrap(), "RENAMED"); asserteq!(tostr(&Enum::HoldsData(0)).unwrap(), "HoldsData"); asserteq!(tostr(&Enum::HoldsDataAsTuple(0, 0)).unwrap(), "HoldsDataAsTuple"); asserteq!(tostr(&Enum::HoldsDataAsStruct { field: 0 }).unwrap(), "HoldsDataAsStruct");

// Safe to deserialize since no data is held asserteq!(fromstr::("UnitVariant").unwrap(), Enum::UnitVariant); asserteq!(fromstr::("RENAMED").unwrap(), Enum::Renamed); // Cant be deserialized since their data was lost during serialization assert!(fromstr::("HoldsData").iserr()); assert!(fromstr::("HoldsDataAsTuple").iserr()); assert!(fromstr::("HoldsDataAsStruct").iserr());

/// Structs

[derive(Debug, PartialEq, Serialize, Deserialize)]

struct UnitStruct; asserteq!(tostr(&UnitStruct).unwrap(), "UnitStruct"); asserteq!(fromstr::("UnitStruct").unwrap(), UnitStruct);

[derive(Debug, PartialEq, Serialize, Deserialize)]

struct TupleStruct(u64, u64); asserteq!(tostr(&TupleStruct(0, 0)).unwrap(), "TupleStruct"); assert!(fromstr::("TupleStruct").iserr());

[derive(Debug, PartialEq, Serialize, Deserialize)]

struct Struct { field: u8 } asserteq!(tostr(&Struct { field: 123 }).unwrap(), "Struct"); assert!(fromstr::("Struct").iserr()); ```

Acknowledgement

This crate originated as a fork of serde_variant which is maintained by Daniel Mueller deso@posteo.net