summaryrefslogtreecommitdiffstats
path: root/vendor/gix-object/src/object/convert.rs
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:41:41 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-05-04 12:41:41 +0000
commit10ee2acdd26a7f1298c6f6d6b7af9b469fe29b87 (patch)
treebdffd5d80c26cf4a7a518281a204be1ace85b4c1 /vendor/gix-object/src/object/convert.rs
parentReleasing progress-linux version 1.70.0+dfsg1-9~progress7.99u1. (diff)
downloadrustc-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.rs228
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),
+ })
+ }
+}