diff --git a/src/path_serializer.rs b/src/path_serializer.rs index a44e636e..74eb9534 100644 --- a/src/path_serializer.rs +++ b/src/path_serializer.rs @@ -1,78 +1,10 @@ -//! path_serializer is used in cases where we need to serialize relative Path -//! and PathBuf objects in a way that's cross-platform. -//! -//! This is used for the snapshot testing system to make sure that snapshots -//! that reference local paths that are generated on Windows don't fail when run -//! in systems that use a different directory separator. -//! -//! To use, annotate your PathBuf or Option field with the correct -//! serializer function: -//! -//! ```ignore -//! # use std::path::PathBuf; -//! # use serde::{Serialize, Deserialize}; -//! -//! #[derive(Serialize, Deserialize)] -//! struct Mine { -//! name: String, -//! -//! // Use 'crate' instead of librojo if writing code inside Rojo -//! #[serde(serialize_with = "librojo::path_serializer::serialize")] -//! source_path: PathBuf, -//! -//! #[serde(serialize_with = "librojo::path_serializer::serialize_option")] -//! maybe_path: Option, -//! } -//! ``` -//! -//! For absolute paths, which are only safe to serialize if they're artificial, -//! use `serialize_absolute`. +//! Path serializer is used to serialize absolute paths in a cross-platform way, +//! by replacing all directory separators with /. -use std::path::{Component, Path}; +use std::path::Path; use serde::{ser::SerializeSeq, Serialize, Serializer}; -pub fn serialize_option(maybe_path: &Option, serializer: S) -> Result -where - S: Serializer, - T: AsRef, -{ - match maybe_path { - Some(path) => serialize(path, serializer), - None => serializer.serialize_none(), - } -} - -pub fn serialize(path: T, serializer: S) -> Result -where - S: Serializer, - T: AsRef, -{ - let path = path.as_ref(); - - assert!( - path.is_relative(), - "path_serializer can only handle relative paths" - ); - - let mut output = String::new(); - - for component in path.components() { - if !output.is_empty() { - output.push('/'); - } - - match component { - Component::CurDir => output.push('.'), - Component::ParentDir => output.push_str(".."), - Component::Normal(piece) => output.push_str(piece.to_str().unwrap()), - _ => panic!("path_serializer cannot handle absolute path components"), - } - } - - serializer.serialize_str(&output) -} - pub fn serialize_absolute(path: T, serializer: S) -> Result where S: Serializer, diff --git a/src/project.rs b/src/project.rs index e8da842d..a81bbbf5 100644 --- a/src/project.rs +++ b/src/project.rs @@ -269,8 +269,6 @@ pub struct ProjectNode { pub children: BTreeMap, pub properties: HashMap, pub ignore_unknown_instances: Option, - - #[serde(serialize_with = "crate::path_serializer::serialize_option")] pub path: Option, }