Skip to main content

gix_object/traits/
_impls.rs

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