diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 12:41:35 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 12:41:35 +0000 |
commit | 7e5d7eea9c580ef4b41a765bde624af431942b96 (patch) | |
tree | 2c0d9ca12878fc4525650aa4e54d77a81a07cc09 /vendor/gix-object/src/kind.rs | |
parent | Adding debian version 1.70.0+dfsg1-9. (diff) | |
download | rustc-7e5d7eea9c580ef4b41a765bde624af431942b96.tar.xz rustc-7e5d7eea9c580ef4b41a765bde624af431942b96.zip |
Merging upstream version 1.70.0+dfsg2.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/gix-object/src/kind.rs')
-rw-r--r-- | vendor/gix-object/src/kind.rs | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/vendor/gix-object/src/kind.rs b/vendor/gix-object/src/kind.rs new file mode 100644 index 000000000..86df251bf --- /dev/null +++ b/vendor/gix-object/src/kind.rs @@ -0,0 +1,40 @@ +use std::fmt; + +use crate::Kind; + +/// The Error used in [`Kind::from_bytes()`]. +#[derive(Debug, Clone, thiserror::Error)] +#[allow(missing_docs)] +pub enum Error { + #[error("Unknown object kind: {kind:?}")] + InvalidObjectKind { kind: bstr::BString }, +} + +impl Kind { + /// Parse a `Kind` from its serialized loose git objects. + pub fn from_bytes(s: &[u8]) -> Result<Kind, Error> { + Ok(match s { + b"tree" => Kind::Tree, + b"blob" => Kind::Blob, + b"commit" => Kind::Commit, + b"tag" => Kind::Tag, + _ => return Err(Error::InvalidObjectKind { kind: s.into() }), + }) + } + + /// Return the name of `self` for use in serialized loose git objects. + pub fn as_bytes(&self) -> &[u8] { + match self { + Kind::Tree => b"tree", + Kind::Commit => b"commit", + Kind::Blob => b"blob", + Kind::Tag => b"tag", + } + } +} + +impl fmt::Display for Kind { + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + f.write_str(std::str::from_utf8(self.as_bytes()).expect("Converting Kind name to utf8")) + } +} |