Skip to main content

gix_object/traits/
_impls.rs

1use 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}