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