diff --git a/radicle-surf/src/diff.rs b/radicle-surf/src/diff.rs index 45b3034..7d5f23e 100644 --- a/radicle-surf/src/diff.rs +++ b/radicle-surf/src/diff.rs @@ -220,7 +220,7 @@ impl Serialize for Moved { S: Serializer, { if self.old == self.new { - let mut state = serializer.serialize_struct("Moved", 2)?; + let mut state = serializer.serialize_struct("Moved", 3)?; state.serialize_field("oldPath", &self.old_path)?; state.serialize_field("newPath", &self.new_path)?; state.serialize_field("current", &self.new)?; @@ -238,7 +238,6 @@ impl Serialize for Moved { } /// A file that was copied within a [`Diff`]. -#[cfg_attr(feature = "serde", derive(Serialize), serde(rename_all = "camelCase"))] #[derive(Clone, Debug, PartialEq, Eq)] pub struct Copied { /// The old path to this file, relative to the repository root. @@ -250,6 +249,30 @@ pub struct Copied { pub diff: DiffContent, } +#[cfg(feature = "serde")] +impl Serialize for Copied { + fn serialize(&self, serializer: S) -> Result + where + S: Serializer, + { + if self.old == self.new { + let mut state = serializer.serialize_struct("Copied", 3)?; + state.serialize_field("oldPath", &self.old_path)?; + state.serialize_field("newPath", &self.new_path)?; + state.serialize_field("current", &self.new)?; + state.end() + } else { + let mut state = serializer.serialize_struct("Copied", 5)?; + state.serialize_field("oldPath", &self.old_path)?; + state.serialize_field("newPath", &self.new_path)?; + state.serialize_field("old", &self.old)?; + state.serialize_field("new", &self.new)?; + state.serialize_field("diff", &self.diff)?; + state.end() + } + } +} + #[cfg_attr(feature = "serde", derive(Serialize), serde(rename_all = "camelCase"))] #[derive(Clone, Debug, PartialEq, Eq)] pub enum EofNewLine { diff --git a/radicle-surf/t/src/diff.rs b/radicle-surf/t/src/diff.rs index bc49b17..1c446ab 100644 --- a/radicle-surf/t/src/diff.rs +++ b/radicle-surf/t/src/diff.rs @@ -303,24 +303,11 @@ fn test_diff_serde() -> Result<(), Error> { "state": "moved" }, { - "diff": { - "eof": "noneMissing", - "hunks": [], - "stats": { - "additions": 0, - "deletions": 0, - }, - "type": "plain", - }, - "new": { + "current": { "mode": "blob", "oid": "5e07534cd74a6a9b2ccd2729b181c4ef26173a5e", }, "newPath": "file_operations/copied.md", - "old": { - "mode": "blob", - "oid": "5e07534cd74a6a9b2ccd2729b181c4ef26173a5e", - }, "oldPath": "README.md", "state": "copied" },