diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 12:41:41 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-04 12:41:41 +0000 |
commit | 10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87 (patch) | |
tree | bdffd5d80c26cf4a7a518281a204be1ace85b4c1 /vendor/gix-object/src/object/convert.rs | |
parent | Releasing progress-linux version 1.70.0+dfsg1-9~progress7.99u1. (diff) | |
download | rustc-10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87.tar.xz rustc-10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87.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/object/convert.rs')
-rw-r--r-- | vendor/gix-object/src/object/convert.rs | 228 |
1 files changed, 228 insertions, 0 deletions
diff --git a/vendor/gix-object/src/object/convert.rs b/vendor/gix-object/src/object/convert.rs new file mode 100644 index 000000000..5e6e63486 --- /dev/null +++ b/vendor/gix-object/src/object/convert.rs @@ -0,0 +1,228 @@ +use std::convert::TryFrom; + +use crate::{tree, Blob, BlobRef, Commit, CommitRef, Object, ObjectRef, Tag, TagRef, Tree, TreeRef}; + +impl From<TagRef<'_>> for Tag { + fn from(other: TagRef<'_>) -> Tag { + let TagRef { + target, + name, + target_kind, + message, + tagger: signature, + pgp_signature, + } = other; + Tag { + target: gix_hash::ObjectId::from_hex(target).expect("prior parser validation"), + name: name.to_owned(), + target_kind, + message: message.to_owned(), + tagger: signature.map(Into::into), + pgp_signature: pgp_signature.map(ToOwned::to_owned), + } + } +} + +impl From<CommitRef<'_>> for Commit { + fn from(other: CommitRef<'_>) -> Commit { + let CommitRef { + tree, + parents, + author, + committer, + encoding, + message, + extra_headers, + } = other; + Commit { + tree: gix_hash::ObjectId::from_hex(tree).expect("prior parser validation"), + parents: parents + .iter() + .map(|parent| gix_hash::ObjectId::from_hex(parent).expect("prior parser validation")) + .collect(), + author: author.into(), + committer: committer.into(), + encoding: encoding.map(ToOwned::to_owned), + message: message.to_owned(), + extra_headers: extra_headers + .into_iter() + .map(|(k, v)| (k.into(), v.into_owned())) + .collect(), + } + } +} + +impl<'a> From<BlobRef<'a>> for Blob { + fn from(v: BlobRef<'a>) -> Self { + Blob { + data: v.data.to_owned(), + } + } +} + +impl From<TreeRef<'_>> for Tree { + fn from(other: TreeRef<'_>) -> Tree { + let TreeRef { entries } = other; + Tree { + entries: entries.into_iter().map(Into::into).collect(), + } + } +} + +impl From<tree::EntryRef<'_>> for tree::Entry { + fn from(other: tree::EntryRef<'_>) -> tree::Entry { + let tree::EntryRef { mode, filename, oid } = other; + tree::Entry { + mode, + filename: filename.to_owned(), + oid: oid.into(), + } + } +} + +impl<'a> From<ObjectRef<'a>> for Object { + fn from(v: ObjectRef<'_>) -> Self { + match v { + ObjectRef::Tree(v) => Object::Tree(v.into()), + ObjectRef::Blob(v) => Object::Blob(v.into()), + ObjectRef::Commit(v) => Object::Commit(v.into()), + ObjectRef::Tag(v) => Object::Tag(v.into()), + } + } +} + +impl From<Tag> for Object { + fn from(v: Tag) -> Self { + Object::Tag(v) + } +} + +impl From<Commit> for Object { + fn from(v: Commit) -> Self { + Object::Commit(v) + } +} + +impl From<Tree> for Object { + fn from(v: Tree) -> Self { + Object::Tree(v) + } +} + +impl From<Blob> for Object { + fn from(v: Blob) -> Self { + Object::Blob(v) + } +} + +impl TryFrom<Object> for Tag { + type Error = Object; + + fn try_from(value: Object) -> Result<Self, Self::Error> { + Ok(match value { + Object::Tag(v) => v, + _ => return Err(value), + }) + } +} + +impl TryFrom<Object> for Commit { + type Error = Object; + + fn try_from(value: Object) -> Result<Self, Self::Error> { + Ok(match value { + Object::Commit(v) => v, + _ => return Err(value), + }) + } +} + +impl TryFrom<Object> for Tree { + type Error = Object; + + fn try_from(value: Object) -> Result<Self, Self::Error> { + Ok(match value { + Object::Tree(v) => v, + _ => return Err(value), + }) + } +} + +impl TryFrom<Object> for Blob { + type Error = Object; + + fn try_from(value: Object) -> Result<Self, Self::Error> { + Ok(match value { + Object::Blob(v) => v, + _ => return Err(value), + }) + } +} + +impl<'a> From<TagRef<'a>> for ObjectRef<'a> { + fn from(v: TagRef<'a>) -> Self { + ObjectRef::Tag(v) + } +} + +impl<'a> From<CommitRef<'a>> for ObjectRef<'a> { + fn from(v: CommitRef<'a>) -> Self { + ObjectRef::Commit(v) + } +} + +impl<'a> From<TreeRef<'a>> for ObjectRef<'a> { + fn from(v: TreeRef<'a>) -> Self { + ObjectRef::Tree(v) + } +} + +impl<'a> From<BlobRef<'a>> for ObjectRef<'a> { + fn from(v: BlobRef<'a>) -> Self { + ObjectRef::Blob(v) + } +} + +impl<'a> TryFrom<ObjectRef<'a>> for TagRef<'a> { + type Error = ObjectRef<'a>; + + fn try_from(value: ObjectRef<'a>) -> Result<Self, Self::Error> { + Ok(match value { + ObjectRef::Tag(v) => v, + _ => return Err(value), + }) + } +} + +impl<'a> TryFrom<ObjectRef<'a>> for CommitRef<'a> { + type Error = ObjectRef<'a>; + + fn try_from(value: ObjectRef<'a>) -> Result<Self, Self::Error> { + Ok(match value { + ObjectRef::Commit(v) => v, + _ => return Err(value), + }) + } +} + +impl<'a> TryFrom<ObjectRef<'a>> for TreeRef<'a> { + type Error = ObjectRef<'a>; + + fn try_from(value: ObjectRef<'a>) -> Result<Self, Self::Error> { + Ok(match value { + ObjectRef::Tree(v) => v, + _ => return Err(value), + }) + } +} + +impl<'a> TryFrom<ObjectRef<'a>> for BlobRef<'a> { + type Error = ObjectRef<'a>; + + fn try_from(value: ObjectRef<'a>) -> Result<Self, Self::Error> { + Ok(match value { + ObjectRef::Blob(v) => v, + _ => return Err(value), + }) + } +} |