gix_object/traits/
_impls.rs

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