use std::io;
use crate::Kind;
pub trait Write {
fn write(&self, object: &dyn WriteTo) -> Result<gix_hash::ObjectId, crate::write::Error> {
let mut buf = Vec::with_capacity(2048);
object.write_to(&mut buf)?;
self.write_stream(object.kind(), buf.len() as u64, &mut buf.as_slice())
}
fn write_buf(&self, object: crate::Kind, mut from: &[u8]) -> Result<gix_hash::ObjectId, crate::write::Error> {
self.write_stream(object, from.len() as u64, &mut from)
}
fn write_stream(
&self,
kind: crate::Kind,
size: u64,
from: &mut dyn io::Read,
) -> Result<gix_hash::ObjectId, crate::write::Error>;
}
pub trait WriteTo {
fn write_to(&self, out: &mut dyn std::io::Write) -> std::io::Result<()>;
fn kind(&self) -> Kind;
fn size(&self) -> u64;
fn loose_header(&self) -> smallvec::SmallVec<[u8; 28]> {
crate::encode::loose_header(self.kind(), self.size())
}
}
mod _impls;
mod find;
pub use find::*;