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_stream(&self, kind: Kind, size: u64, from: &mut dyn Read) -> Result<ObjectId, crate::write::Error> {
20        (*self).write_stream(kind, size, from)
21    }
22}
23
24impl<T> crate::Write for Arc<T>
25where
26    T: crate::Write,
27{
28    fn write(&self, object: &dyn WriteTo) -> Result<ObjectId, crate::write::Error> {
29        self.deref().write(object)
30    }
31
32    fn write_buf(&self, object: Kind, from: &[u8]) -> Result<ObjectId, crate::write::Error> {
33        self.deref().write_buf(object, from)
34    }
35
36    fn write_stream(&self, kind: Kind, size: u64, from: &mut dyn Read) -> Result<ObjectId, crate::write::Error> {
37        self.deref().write_stream(kind, size, from)
38    }
39}
40
41impl<T> crate::Write for Rc<T>
42where
43    T: crate::Write,
44{
45    fn write(&self, object: &dyn WriteTo) -> Result<ObjectId, crate::write::Error> {
46        self.deref().write(object)
47    }
48
49    fn write_buf(&self, object: Kind, from: &[u8]) -> Result<ObjectId, crate::write::Error> {
50        self.deref().write_buf(object, from)
51    }
52
53    fn write_stream(&self, kind: Kind, size: u64, from: &mut dyn Read) -> Result<ObjectId, crate::write::Error> {
54        self.deref().write_stream(kind, size, from)
55    }
56}
57
58impl<T> WriteTo for &T
59where
60    T: WriteTo,
61{
62    fn write_to(&self, out: &mut dyn std::io::Write) -> std::io::Result<()> {
63        <T as WriteTo>::write_to(self, out)
64    }
65
66    fn kind(&self) -> Kind {
67        <T as WriteTo>::kind(self)
68    }
69
70    fn size(&self) -> u64 {
71        <T as WriteTo>::size(self)
72    }
73}