1 use std
::convert
::TryFrom
;
3 use crate::{object, Commit, Object, ObjectDetached, Tag, Tree}
;
5 impl<'repo
> From
<Object
<'repo
>> for ObjectDetached
{
6 fn from(mut v
: Object
<'repo
>) -> Self {
10 data
: std
::mem
::take(&mut v
.data
),
15 impl<'repo
> From
<Commit
<'repo
>> for ObjectDetached
{
16 fn from(mut v
: Commit
<'repo
>) -> Self {
19 kind
: gix_object
::Kind
::Commit
,
20 data
: std
::mem
::take(&mut v
.data
),
25 impl<'repo
> From
<Tag
<'repo
>> for ObjectDetached
{
26 fn from(mut v
: Tag
<'repo
>) -> Self {
29 kind
: gix_object
::Kind
::Tag
,
30 data
: std
::mem
::take(&mut v
.data
),
35 impl<'repo
> From
<Commit
<'repo
>> for Object
<'repo
> {
36 fn from(mut v
: Commit
<'repo
>) -> Self {
39 kind
: gix_object
::Kind
::Commit
,
40 data
: steal_from_freelist(&mut v
.data
),
46 impl<'repo
> AsRef
<[u8]> for Object
<'repo
> {
47 fn as_ref(&self) -> &[u8] {
52 impl AsRef
<[u8]> for ObjectDetached
{
53 fn as_ref(&self) -> &[u8] {
58 impl<'repo
> TryFrom
<Object
<'repo
>> for Commit
<'repo
> {
59 type Error
= Object
<'repo
>;
61 fn try_from(mut value
: Object
<'repo
>) -> Result
<Self, Self::Error
> {
62 let handle
= value
.repo
;
64 object
::Kind
::Commit
=> Ok(Commit
{
67 data
: steal_from_freelist(&mut value
.data
),
74 impl<'repo
> TryFrom
<Object
<'repo
>> for Tag
<'repo
> {
75 type Error
= Object
<'repo
>;
77 fn try_from(mut value
: Object
<'repo
>) -> Result
<Self, Self::Error
> {
78 let handle
= value
.repo
;
80 object
::Kind
::Tag
=> Ok(Tag
{
83 data
: steal_from_freelist(&mut value
.data
),
90 impl<'repo
> TryFrom
<Object
<'repo
>> for Tree
<'repo
> {
91 type Error
= Object
<'repo
>;
93 fn try_from(mut value
: Object
<'repo
>) -> Result
<Self, Self::Error
> {
94 let handle
= value
.repo
;
96 object
::Kind
::Tree
=> Ok(Tree
{
99 data
: steal_from_freelist(&mut value
.data
),
106 impl<'r
> std
::fmt
::Debug
for Object
<'r
> {
107 fn fmt(&self, f
: &mut std
::fmt
::Formatter
<'_
>) -> std
::fmt
::Result
{
108 use gix_object
::Kind
::*;
109 let type_name
= match self.kind
{
115 write
!(f
, "{}({})", type_name
, self.id
)
119 /// In conjunction with the handles free list, leaving an empty Vec in place of the original causes it to not be
120 /// returned to the free list.
121 fn steal_from_freelist(data
: &mut Vec
<u8>) -> Vec
<u8> {