--- /dev/null
+#![cfg(feature = "serde")]\r
+\r
+#[macro_use]\r
+extern crate serde_derive;\r
+\r
+extern crate semver;\r
+extern crate serde_json;\r
+\r
+use semver::{Identifier, Version, VersionReq};\r
+\r
+#[derive(Serialize, Deserialize, PartialEq, Debug)]\r
+struct Identified {\r
+ name: String,\r
+ identifier: Identifier,\r
+}\r
+\r
+#[derive(Serialize, Deserialize, PartialEq, Debug)]\r
+struct Versioned {\r
+ name: String,\r
+ vers: Version,\r
+}\r
+\r
+#[test]\r
+fn serialize_identifier() {\r
+ let id = Identified {\r
+ name: "serde".to_owned(),\r
+ identifier: Identifier::Numeric(100),\r
+ };\r
+ let j = serde_json::to_string(&id).unwrap();\r
+ assert_eq!(j, r#"{"name":"serde","identifier":100}"#);\r
+\r
+ let id = Identified {\r
+ name: "serde".to_owned(),\r
+ identifier: Identifier::AlphaNumeric("b100".to_owned()),\r
+ };\r
+ let j = serde_json::to_string(&id).unwrap();\r
+ assert_eq!(j, r#"{"name":"serde","identifier":"b100"}"#);\r
+}\r
+\r
+#[test]\r
+fn deserialize_identifier() {\r
+ let j = r#"{"name":"serde","identifier":100}"#;\r
+ let id = serde_json::from_str::<Identified>(j).unwrap();\r
+ let expected = Identified {\r
+ name: "serde".to_owned(),\r
+ identifier: Identifier::Numeric(100),\r
+ };\r
+ assert_eq!(id, expected);\r
+\r
+ let j = r#"{"name":"serde","identifier":"b100"}"#;\r
+ let id = serde_json::from_str::<Identified>(j).unwrap();\r
+ let expected = Identified {\r
+ name: "serde".to_owned(),\r
+ identifier: Identifier::AlphaNumeric("b100".to_owned()),\r
+ };\r
+ assert_eq!(id, expected);\r
+}\r
+\r
+#[test]\r
+fn serialize_version() {\r
+ let v = Versioned {\r
+ name: "serde".to_owned(),\r
+ vers: Version::parse("1.0.0").unwrap(),\r
+ };\r
+ let j = serde_json::to_string(&v).unwrap();\r
+ assert_eq!(j, r#"{"name":"serde","vers":"1.0.0"}"#);\r
+}\r
+\r
+#[test]\r
+fn deserialize_version() {\r
+ let j = r#"{"name":"serde","vers":"1.0.0"}"#;\r
+ let v = serde_json::from_str::<Versioned>(j).unwrap();\r
+ let expected = Versioned {\r
+ name: "serde".to_owned(),\r
+ vers: Version::parse("1.0.0").unwrap(),\r
+ };\r
+ assert_eq!(v, expected);\r
+}\r
+\r
+#[test]\r
+fn serialize_versionreq() {\r
+ let v = VersionReq::exact(&Version::parse("1.0.0").unwrap());\r
+\r
+ assert_eq!(serde_json::to_string(&v).unwrap(), r#""= 1.0.0""#);\r
+}\r
+\r
+#[test]\r
+fn deserialize_versionreq() {\r
+ assert_eq!(\r
+ "1.0.0".parse::<VersionReq>().unwrap(),\r
+ serde_json::from_str(r#""1.0.0""#).unwrap()\r
+ );\r
+}\r