Show More
@@ -54,28 +54,18 b' pub struct FilelogEntry(Vec<u8>);' | |||
|
54 | 54 | |
|
55 | 55 | impl FilelogEntry { |
|
56 | 56 | /// Split into metadata and data |
|
57 | /// Returns None if there is no metadata, so the entire entry is data. | |
|
58 | fn split_metadata(&self) -> Result<Option<(&[u8], &[u8])>, HgError> { | |
|
57 | pub fn split(&self) -> Result<(Option<&[u8]>, &[u8]), HgError> { | |
|
59 | 58 | const DELIMITER: &[u8; 2] = &[b'\x01', b'\n']; |
|
60 | 59 | |
|
61 | 60 | if let Some(rest) = self.0.drop_prefix(DELIMITER) { |
|
62 | 61 | if let Some((metadata, data)) = rest.split_2_by_slice(DELIMITER) { |
|
63 |
Ok(Some( |
|
|
62 | Ok((Some(metadata), data)) | |
|
64 | 63 | } else { |
|
65 | 64 | Err(HgError::corrupted( |
|
66 | 65 | "Missing metadata end delimiter in filelog entry", |
|
67 | 66 | )) |
|
68 | 67 | } |
|
69 | 68 | } else { |
|
70 | Ok(None) | |
|
71 | } | |
|
72 | } | |
|
73 | ||
|
74 | /// Split into metadata and data | |
|
75 | pub fn split(&self) -> Result<(Option<&[u8]>, &[u8]), HgError> { | |
|
76 | if let Some((metadata, data)) = self.split_metadata()? { | |
|
77 | Ok((Some(metadata), data)) | |
|
78 | } else { | |
|
79 | 69 | Ok((None, &self.0)) |
|
80 | 70 | } |
|
81 | 71 | } |
@@ -89,7 +79,7 b' impl FilelogEntry {' | |||
|
89 | 79 | /// Consume the entry, and convert it into data, discarding any metadata, |
|
90 | 80 | /// if present. |
|
91 | 81 | pub fn into_data(self) -> Result<Vec<u8>, HgError> { |
|
92 |
if let Some( |
|
|
82 | if let (Some(_metadata), data) = self.split()? { | |
|
93 | 83 | Ok(data.to_owned()) |
|
94 | 84 | } else { |
|
95 | 85 | Ok(self.0) |
General Comments 0
You need to be logged in to leave comments.
Login now