Skip to main content

gix_object/traits/
_impls.rs

1use std::{io::Read, ops::Deref, rc::Rc, sync::Arc};
2
3use gix_hash::ObjectId;
4
5use crate::{Kind, WriteTo};
6
7impl<T> crate::Write for &T
8where
9    T: crate::Write,
10{
11    fn write(&self, object: &dyn WriteTo) -> Result<ObjectId, crate::write::Error> {
12        (*self).write(object)
13    }
14
15    fn write_buf(&self, object: Kind, from: &[u8]) -> Result<ObjectId, crate::write::Error> {
16        (*self).write_buf(object, from)
17    }
18
19    fn write_buf_with_known_id(
20        &self,
21        object: Kind,
22        from: &[u8],
23        id: ObjectId,
24    ) -> Result<ObjectId, crate::write::Error> {
25        (*self).write_buf_with_known_id(object, from, id)
26    }
27
28    fn write_stream(&self, kind: Kind, size: u64, from: &mut dyn Read) -> Result<ObjectId, crate::write::Error> {
29        (*self).write_stream(kind, size, from)
30    }
31
32    fn write_stream_with_known_id(
33        &self,
34        kind: Kind,
35        size: u64,
36        from: &mut dyn Read,
37        id: ObjectId,
38    ) -> Result<ObjectId, crate::write::Error> {
39        (*self).write_stream_with_known_id(kind, size, from, id)
40    }
41}
42
43impl<T> crate::Write for Arc<T>
44where
45    T: crate::Write,
46{
47    fn write(&self, object: &dyn WriteTo) -> Result<ObjectId, crate::write::Error> {
48        self.deref().write(object)
49    }
50
51    fn write_buf(&self, object: Kind, from: &[u8]) -> Result<ObjectId, crate::write::Error> {
52        self.deref().write_buf(object, from)
53    }
54
55    fn write_buf_with_known_id(
56        &self,
57        object: Kind,
58        from: &[u8],
59        id: ObjectId,
60    ) -> Result<ObjectId, crate::write::Error> {
61        self.deref().write_buf_with_known_id(object, from, id)
62    }
63
64    fn write_stream(&self, kind: Kind, size: u64, from: &mut dyn Read) -> Result<ObjectId, crate::write::Error> {
65        self.deref().write_stream(kind, size, from)
66    }
67
68    fn write_stream_with_known_id(
69        &self,
70        kind: Kind,
71        size: u64,
72        from: &mut dyn Read,
73        id: ObjectId,
74    ) -> Result<ObjectId, crate::write::Error> {
75        self.deref().write_stream_with_known_id(kind, size, from, id)
76    }
77}
78
79impl<T> crate::Write for Rc<T>
80where
81    T: crate::Write,
82{
83    fn write(&self, object: &dyn WriteTo) -> Result<ObjectId, crate::write::Error> {
84        self.deref().write(object)
85    }
86
87    fn write_buf(&self, object: Kind, from: &[u8]) -> Result<ObjectId, crate::write::Error> {
88        self.deref().write_buf(object, from)
89    }
90
91    fn write_buf_with_known_id(
92        &self,
93        object: Kind,
94        from: &[u8],
95        id: ObjectId,
96    ) -> Result<ObjectId, crate::write::Error> {
97        self.deref().write_buf_with_known_id(object, from, id)
98    }
99
100    fn write_stream(&self, kind: Kind, size: u64, from: &mut dyn Read) -> Result<ObjectId, crate::write::Error> {
101        self.deref().write_stream(kind, size, from)
102    }
103
104    fn write_stream_with_known_id(
105        &self,
106        kind: Kind,
107        size: u64,
108        from: &mut dyn Read,
109        id: ObjectId,
110    ) -> Result<ObjectId, crate::write::Error> {
111        self.deref().write_stream_with_known_id(kind, size, from, id)
112    }
113}
114
115impl<T> WriteTo for &T
116where
117    T: WriteTo,
118{
119    fn write_to(&self, out: &mut dyn std::io::Write) -> std::io::Result<()> {
120        <T as WriteTo>::write_to(self, out)
121    }
122
123    fn kind(&self) -> Kind {
124        <T as WriteTo>::kind(self)
125    }
126
127    fn size(&self) -> u64 {
128        <T as WriteTo>::size(self)
129    }
130}