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