use std::{io::Read, ops::Deref, rc::Rc, sync::Arc}; use gix_hash::ObjectId; use crate::{Kind, WriteTo}; impl crate::Write for &T where T: crate::Write, { fn write(&self, object: &dyn WriteTo) -> Result { (*self).write(object) } fn write_buf(&self, object: Kind, from: &[u8]) -> Result { (*self).write_buf(object, from) } fn write_buf_with_known_id( &self, object: Kind, from: &[u8], id: ObjectId, ) -> Result { (*self).write_buf_with_known_id(object, from, id) } fn write_stream(&self, kind: Kind, size: u64, from: &mut dyn Read) -> Result { (*self).write_stream(kind, size, from) } fn write_stream_with_known_id( &self, kind: Kind, size: u64, from: &mut dyn Read, id: ObjectId, ) -> Result { (*self).write_stream_with_known_id(kind, size, from, id) } } impl crate::Write for Arc where T: crate::Write, { fn write(&self, object: &dyn WriteTo) -> Result { self.deref().write(object) } fn write_buf(&self, object: Kind, from: &[u8]) -> Result { self.deref().write_buf(object, from) } fn write_buf_with_known_id( &self, object: Kind, from: &[u8], id: ObjectId, ) -> Result { self.deref().write_buf_with_known_id(object, from, id) } fn write_stream(&self, kind: Kind, size: u64, from: &mut dyn Read) -> Result { self.deref().write_stream(kind, size, from) } fn write_stream_with_known_id( &self, kind: Kind, size: u64, from: &mut dyn Read, id: ObjectId, ) -> Result { self.deref().write_stream_with_known_id(kind, size, from, id) } } impl crate::Write for Rc where T: crate::Write, { fn write(&self, object: &dyn WriteTo) -> Result { self.deref().write(object) } fn write_buf(&self, object: Kind, from: &[u8]) -> Result { self.deref().write_buf(object, from) } fn write_buf_with_known_id( &self, object: Kind, from: &[u8], id: ObjectId, ) -> Result { self.deref().write_buf_with_known_id(object, from, id) } fn write_stream(&self, kind: Kind, size: u64, from: &mut dyn Read) -> Result { self.deref().write_stream(kind, size, from) } fn write_stream_with_known_id( &self, kind: Kind, size: u64, from: &mut dyn Read, id: ObjectId, ) -> Result { self.deref().write_stream_with_known_id(kind, size, from, id) } } impl WriteTo for &T where T: WriteTo, { fn write_to(&self, out: &mut dyn std::io::Write) -> std::io::Result<()> { ::write_to(self, out) } fn kind(&self) -> Kind { ::kind(self) } fn size(&self) -> u64 { ::size(self) } }