1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111
//! # Serde Serialization/deserialization to and from the file system //! extern crate serde; #[cfg(test)] #[macro_use] extern crate serde_derive; #[cfg(test)] extern crate serde_bytes; #[macro_use] extern crate derive_error; #[cfg(test)] extern crate tempdir; #[cfg(test)] #[macro_use] extern crate assert_matches; use std::path::Path; use serde::Serialize; use serde::de::DeserializeOwned; mod ser; pub use ser::FilesystemSerializer; pub use ser::Error as SerializerError; /// Serializes a value to a file system /// /// ``` /// extern crate tempdir; /// use tempdir::TempDir; /// #[macro_use] extern crate serde_derive; /// /// #[derive(Serialize, Deserialize, Debug, PartialEq)] /// struct MyStruct { /// value: String, /// } /// /// extern crate serde_fs; /// use serde_fs::{from_fs, to_fs}; /// /// fn main() { /// let val = MyStruct { value: "Hello".into() }; /// let tmp = TempDir::new("serde_fs").unwrap(); /// to_fs(tmp.path(), &val).unwrap(); /// let val1: MyStruct = from_fs(tmp.path()).unwrap(); /// assert_eq!(val1, val); /// } /// /// ``` pub fn to_fs<T: ?Sized, P>(path: P, value: &T) -> Result<(), SerializerError> where T: Serialize, P: AsRef<Path> { let serializer = FilesystemSerializer::new(path); value.serialize(serializer) } mod de; pub use de::FilesystemDeserializer; pub use de::Error as DeserializerError; /// Deserializes a value from a file system /// /// ``` /// extern crate tempdir; /// use tempdir::TempDir; /// #[macro_use] extern crate serde_derive; /// /// #[derive(Serialize, Deserialize, Debug, PartialEq)] /// struct MyStruct { /// value: String, /// } /// /// extern crate serde_fs; /// use serde_fs::{from_fs, to_fs}; /// /// fn main() { /// let val = MyStruct { value: "Hello".into() }; /// let tmp = TempDir::new("serde_fs").unwrap(); /// to_fs(tmp.path(), &val).unwrap(); /// let val1: MyStruct = from_fs(tmp.path()).unwrap(); /// assert_eq!(val1, val); /// } /// /// ``` pub fn from_fs<P: AsRef<Path>, T: DeserializeOwned>(path: P) -> Result<T, DeserializerError> { let deserializer = FilesystemDeserializer::new(path); T::deserialize(deserializer) } /// Deserializes a value from a file system in place /// /// ``` /// extern crate tempdir; /// use tempdir::TempDir; /// #[macro_use] extern crate serde_derive; /// /// #[derive(Serialize, Deserialize, Debug, PartialEq)] /// struct MyStruct { /// value: String, /// } /// /// extern crate serde_fs; /// use serde_fs::{from_fs_in_place, to_fs}; /// /// fn main() { /// let val = MyStruct { value: "Hello".into() }; /// let tmp = TempDir::new("serde_fs").unwrap(); /// to_fs(tmp.path(), &val).unwrap(); /// let mut val1 = MyStruct { value: "Nothing here".into() }; /// from_fs_in_place(tmp.path(), &mut val1).unwrap(); /// assert_eq!(val1, val); /// } /// /// ``` pub fn from_fs_in_place<P: AsRef<Path>, T: DeserializeOwned>(path: P, place: &mut T) -> Result<(), DeserializerError> { let deserializer = FilesystemDeserializer::new(path); T::deserialize_in_place(deserializer, place) }