comparison rust/hg-core/src/revlog/node.rs @ 46443:43d63979a75e

rust: use HgError in RevlogError and Vfs Differential Revision: https://phab.mercurial-scm.org/D9897
author Simon Sapin <simon.sapin@octobus.net>
date Wed, 27 Jan 2021 14:45:25 +0100
parents 2e2033081274
children 98a455a62699
comparison
equal deleted inserted replaced
46442:02d3bb972121 46443:43d63979a75e
6 //! Definitions and utilities for Revision nodes 6 //! Definitions and utilities for Revision nodes
7 //! 7 //!
8 //! In Mercurial code base, it is customary to call "a node" the binary SHA 8 //! In Mercurial code base, it is customary to call "a node" the binary SHA
9 //! of a revision. 9 //! of a revision.
10 10
11 use crate::errors::HgError;
11 use bytes_cast::BytesCast; 12 use bytes_cast::BytesCast;
12 use std::convert::{TryFrom, TryInto}; 13 use std::convert::{TryFrom, TryInto};
13 use std::fmt; 14 use std::fmt;
14 15
15 /// The length in bytes of a `Node` 16 /// The length in bytes of a `Node`
132 if prefix.nybbles_len() == NODE_NYBBLES_LENGTH { 133 if prefix.nybbles_len() == NODE_NYBBLES_LENGTH {
133 Ok(Self { data: prefix.data }) 134 Ok(Self { data: prefix.data })
134 } else { 135 } else {
135 Err(FromHexError) 136 Err(FromHexError)
136 } 137 }
138 }
139
140 /// `from_hex`, but for input from an internal file of the repository such
141 /// as a changelog or manifest entry.
142 ///
143 /// An error is treated as repository corruption.
144 pub fn from_hex_for_repo(hex: impl AsRef<[u8]>) -> Result<Node, HgError> {
145 Self::from_hex(hex.as_ref()).map_err(|FromHexError| {
146 HgError::CorruptedRepository(format!(
147 "Expected a full hexadecimal node ID, found {}",
148 String::from_utf8_lossy(hex.as_ref())
149 ))
150 })
137 } 151 }
138 152
139 /// Provide access to binary data 153 /// Provide access to binary data
140 /// 154 ///
141 /// This is needed by FFI layers, for instance to return expected 155 /// This is needed by FFI layers, for instance to return expected