diff --git a/Cargo.toml b/Cargo.toml index 44d7c4d..7d77fa6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,5 +14,18 @@ path = "png-sys" [dependencies] libc = "0.1.5" +[dependencies.serde] +version = "*" +optional = true + +[dependencies.serde_macros] +version = "*" +optional = true + [build-dependencies] gcc = "0.3.4" + +[features] +serde-serialization = [ "serde", "serde_macros" ] + + diff --git a/src/lib.rs b/src/lib.rs index 0eba0fd..c632e96 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -9,9 +9,14 @@ #![crate_name = "png"] #![crate_type = "rlib"] +#![cfg_attr(feature="serde-serialization", feature(custom_derive, plugin))] +#![cfg_attr(feature="serde-serialization", plugin(serde_macros))] extern crate libc; +#[cfg(feature="serde-serialization")] +extern crate serde; + use libc::{c_int, size_t}; use std::error::Error; use std::fs::File; @@ -24,7 +29,7 @@ use std::slice; pub mod ffi; - +#[cfg_attr(feature="serde-serialization", derive(Deserialize, Serialize))] pub enum PixelsByColorType { K8(Vec), KA8(Vec), @@ -32,6 +37,7 @@ pub enum PixelsByColorType { RGBA8(Vec), } +#[cfg_attr(feature="serde-serialization", derive(Deserialize, Serialize))] pub struct Image { pub width: u32, pub height: u32,