Skip to main content

PackEncoder

Struct PackEncoder 

Source
pub struct PackEncoder { /* private fields */ }
Expand description

A encoder for generating pack files with delta objects.

Implementations§

Source§

impl PackEncoder

Source

pub fn new( object_number: usize, window_size: usize, sender: Sender<Vec<u8>>, ) -> Self

Source

pub fn new_with_idx( object_number: usize, window_size: usize, pack_sender: Sender<Vec<u8>>, idx_sender: Sender<Vec<u8>>, ) -> Self

Source

pub fn drop_sender(&mut self)

Source

pub async fn send_data(&mut self, data: Vec<u8>)

Source

pub fn get_hash(&self) -> Option<ObjectHash>

Get the hash of the pack file. if the pack file is not finished, return None

Source

pub async fn encode( &mut self, entry_rx: Receiver<MetaAttached<Entry, EntryMeta>>, ) -> Result<(), GitError>

Encodes entries into a pack file with delta objects and outputs them through the specified writer.

§Arguments
  • rx - A receiver channel (mpsc::Receiver<Entry>) from which entries to be encoded are received.
§Returns

Returns Ok(()) if encoding is successful, or a GitError in case of failure.

  • Returns a GitError if there is a failure during the encoding process.
  • Returns PackEncodeError if an encoding operation is already in progress.
Source

pub async fn encode_with_zstdelta( &mut self, entry_rx: Receiver<MetaAttached<Entry, EntryMeta>>, ) -> Result<(), GitError>

Encode with zstdelta

Source

pub async fn parallel_encode( &mut self, entry_rx: Receiver<MetaAttached<Entry, EntryMeta>>, ) -> Result<(), GitError>

Parallel encode with rayon, only works when window_size == 0 (no delta)

Source

pub async fn encode_async( self, rx: Receiver<MetaAttached<Entry, EntryMeta>>, ) -> Result<JoinHandle<()>, GitError>

async version of encode, result data will be returned by JoinHandle. It will consume PackEncoder, so you can’t use it after calling this function. when window_size = 0, it executes parallel_encode which retains stream transmission when window_size = 0,it executes encode which uses magic sort and delta. It seems that all other modules rely on this api

Source

pub async fn encode_async_with_zstdelta( self, rx: Receiver<MetaAttached<Entry, EntryMeta>>, ) -> Result<JoinHandle<()>, GitError>

async version of encode_with_zstdelta, result data will be returned by JoinHandle.

Source

pub async fn encode_idx_file(&mut self) -> Result<(), GitError>

Generate idx file after pack file has been generated

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> IntoEither for T

Source§

fn into_either(self, into_left: bool) -> Either<Self, Self>

Converts self into a Left variant of Either<Self, Self> if into_left is true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

Converts self into a Left variant of Either<Self, Self> if into_left(&self) returns true. Converts self into a Right variant of Either<Self, Self> otherwise. Read more
Source§

impl<T> Pointable for T

Source§

const ALIGN: usize

The alignment of pointer.
Source§

type Init = T

The type for initializers.
Source§

unsafe fn init(init: <T as Pointable>::Init) -> usize

Initializes a with the given initializer. Read more
Source§

unsafe fn deref<'a>(ptr: usize) -> &'a T

Dereferences the given pointer. Read more
Source§

unsafe fn deref_mut<'a>(ptr: usize) -> &'a mut T

Mutably dereferences the given pointer. Read more
Source§

unsafe fn drop(ptr: usize)

Drops the object pointed to by the given pointer. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<T> ValueSize for T

Source§

fn value_size(&self) -> usize

The size of this value in bytes, excluding allocated data. Read more
Source§

fn value_size_sum_iter<'item>(iterator: impl Iterator<Item = &'item T>) -> usize
where T: 'item,

The total sum of the sizes of all values in the given iterator, in bytes. This is default-implemented by computing ValueSize::value_size on every element and summing them. For Sized types, a more potentially efficient implementation using Iterator::count is provided. If you are implementing this trait manually, it is unlikely to be more efficient to provide a manual implementation here. Read more
Source§

fn value_size_sum_exact_size_iter<'item>( iterator: impl ExactSizeIterator<Item = &'item T>, ) -> usize
where T: 'item,

The total sum of the sizes of all values in the given exact-size-iterator, in bytes. This is default-implemented by using ValueSize::value_size_sum_iter. For Sized types, a usually more efficient implementation using ExactSizeIterator::len is provided. If you are implementing this trait manually, it is unlikely to be more efficient to provide a manual implementation here. Read more
Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,