SHA1

Struct SHA1 

Source
pub struct SHA1(pub [u8; 20]);
Expand description

The SHA1 struct, encapsulating a [u8; 20] array, is specifically designed to represent Git hash IDs. In Git’s context, these IDs are 40-character hexadecimal strings generated via the SHA-1 algorithm. Each Git object receives a unique hash ID based on its content, serving as an identifier for its location within the Git internal database. Utilizing a dedicated struct for these hash IDs enhances code readability and maintainability by providing a clear, structured format for their manipulation and storage.

§Change Log

In previous versions of the ‘mega’ project, Hash was used to denote hash values. However, in newer versions, SHA1 is employed for this purpose. Future updates plan to extend support to SHA256 and SHA512, or potentially other hash algorithms. By abstracting the hash model to Hash, and using specific imports like use crate::hash::SHA1 or use crate::hash::SHA256, the codebase maintains a high level of clarity and maintainability. This design choice allows for easier adaptation to different hash algorithms while keeping the underlying implementation consistent and understandable. - Nov 26, 2023 (by @genedna)

Tuple Fields§

§0: [u8; 20]

Implementations§

Source§

impl SHA1

Implementation of the SHA1 struct.

The naming conventions for the methods in this implementation are designed to be intuitive and self-explanatory:

  1. new Prefix: Methods starting with new are used for computing an SHA-1 hash from given data, signifying the creation of a new SHA1 instance. For example, pub fn new(data: &Vec<u8>) -> SHA1 takes a byte vector and calculates its SHA-1 hash.

  2. from Prefix: Methods beginning with from are intended for creating a SHA1 instance from an existing, pre-calculated value. This implies direct derivation of the SHA1 object from the provided input. For instance, pub fn from_bytes(bytes: &[u8]) -> SHA1 constructs a SHA1 from a 20-byte array representing an SHA-1 hash.

  3. to Prefix: Methods with the to prefix are used for outputting the SHA1 value in various formats. This prefix indicates a transformation or conversion of the SHA1 instance into another representation. For example, pub fn to_string(self) -> String converts the SHA1 value to a plain hexadecimal string, and pub fn to_data(self) -> Vec<u8> converts it into a byte vector. The to prefix thus serves as a clear indicator that the method is exporting or transforming the SHA1 value into a different format.

These method naming conventions (new, from, to) provide clarity and predictability in the API, making it easier for users to understand the intended use and functionality of each method within the SHA1 struct.

Source

pub const SIZE: usize = 20usize

Source

pub fn new(data: &[u8]) -> SHA1

Calculate the SHA-1 hash of the byte slice, then create a Hash value

Source

pub fn from_type_and_data(object_type: ObjectType, data: &[u8]) -> SHA1

Create a Hash from the object type and data This function is used to create a SHA1 hash from the object type and data. It constructs a byte vector that includes the object type, the size of the data, and the data itself, and then computes the SHA1 hash of this byte vector.

Hash compute <- {Object Type}+{ }+{Object Size(before compress)}+{\x00}+{Object Content(before compress)}

Source

pub fn from_bytes(bytes: &[u8]) -> SHA1

Create Hash from a byte array, which is a 20-byte array already calculated

Source

pub fn from_stream(data: &mut impl Read) -> Result<SHA1>

Read the Hash value from the stream This function will read exactly 20 bytes from the stream

Source

pub fn to_color_str(self) -> String

Export sha1 value to String with the color

Source

pub fn to_data(self) -> Vec<u8>

Export sha1 value to a byte array

Source

pub fn _to_string(&self) -> String

core::fmt::Display is somewhat expensive, use this hack to get a string more efficiently

Trait Implementations§

Source§

impl AsRef<[u8]> for SHA1

Source§

fn as_ref(&self) -> &[u8]

Converts this type into a shared reference of the (usually inferred) input type.
Source§

impl<'__de, __Context> BorrowDecode<'__de, __Context> for SHA1

Source§

fn borrow_decode<__D: BorrowDecoder<'__de, Context = __Context>>( decoder: &mut __D, ) -> Result<Self, DecodeError>

Attempt to decode this type with the given BorrowDecode.
Source§

impl Clone for SHA1

Source§

fn clone(&self) -> SHA1

Returns a duplicate of the value. Read more
1.0.0 · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for SHA1

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl<__Context> Decode<__Context> for SHA1

Source§

fn decode<__D: Decoder<Context = __Context>>( decoder: &mut __D, ) -> Result<Self, DecodeError>

Attempt to decode this type with the given Decode.
Source§

impl Default for SHA1

Source§

fn default() -> SHA1

Returns the “default value” for a type. Read more
Source§

impl<'de> Deserialize<'de> for SHA1

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Display for SHA1

Display trait for SHA1.

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Allows [SHA1::to_string()] to be used. Note: If you want a terminal-friendly colorized output, use SHA1::to_color_str().

Source§

impl Encode for SHA1

Source§

fn encode<__E: Encoder>(&self, encoder: &mut __E) -> Result<(), EncodeError>

Encode a given type.
Source§

impl FromStr for SHA1

Implementation of the std::str::FromStr trait for the SHA1 type.

To effectively use the from_str method for converting a string to a SHA1 object, consider the following:

  1. The input string s should be a pre-calculated hexadecimal string, exactly 40 characters in length. This string represents a SHA1 hash and should conform to the standard SHA1 hash format.
  2. It is necessary to explicitly import the FromStr trait to utilize the from_str method. Include the import statement use std::str::FromStr; in your code before invoking the from_str function. This import ensures that the from_str method is available for converting strings to SHA1 objects.
Source§

type Err = String

The associated error which can be returned from parsing.
Source§

fn from_str(s: &str) -> Result<Self, Self::Err>

Parses a string s to return a value of this type. Read more
Source§

impl Hash for SHA1

Source§

fn hash<__H: Hasher>(&self, state: &mut __H)

Feeds this value into the given Hasher. Read more
1.3.0 · Source§

fn hash_slice<H>(data: &[Self], state: &mut H)
where H: Hasher, Self: Sized,

Feeds a slice of this type into the given Hasher. Read more
Source§

impl HeapSize for SHA1

Source§

fn heap_size(&self) -> usize

The size of the referenced data that is owned by this value in bytes, usually allocated on the heap (such as the value of a Box or the elements and reserved memory of a Vec). Read more
Source§

fn heap_size_sum_iter<'item, Fun, Iter>(make_iter: Fun) -> usize
where Self: 'item, Fun: Fn() -> Iter, Iter: Iterator<Item = &'item Self>,

The total sum of the sizes of referenced data that is owned by a value in an iterator constructed with the given constructor, in bytes. This is default-implemented by computing HeapSize::heap_size on every element and summing them. In some cases, specialized implementations may be more performant. This is common for types which do not allocate any memory at all, where this function can be implemented by a constant zero. Read more
Source§

fn heap_size_sum_exact_size_iter<'item, Fun, Iter>(make_iter: Fun) -> usize
where Self: 'item, Fun: Fn() -> Iter, Iter: ExactSizeIterator<Item = &'item Self>,

The total sum of the sizes of referenced data that is owned by a value in an exact-size-iterator constructed with the given constructor, in bytes. This is default-implemented by using HeapSize::heap_size_sum_iter. In some cases, specialized implementations relying on the iterator’s size may be more performant. This is common for types which allocate a constant amount of memory, where this function can multiply the iterator’s length. Read more
Source§

impl Ord for SHA1

Source§

fn cmp(&self, other: &SHA1) -> Ordering

This method returns an Ordering between self and other. Read more
1.21.0 · Source§

fn max(self, other: Self) -> Self
where Self: Sized,

Compares and returns the maximum of two values. Read more
1.21.0 · Source§

fn min(self, other: Self) -> Self
where Self: Sized,

Compares and returns the minimum of two values. Read more
1.50.0 · Source§

fn clamp(self, min: Self, max: Self) -> Self
where Self: Sized,

Restrict a value to a certain interval. Read more
Source§

impl PartialEq for SHA1

Source§

fn eq(&self, other: &SHA1) -> bool

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

fn ne(&self, other: &Rhs) -> bool

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl PartialOrd for SHA1

Source§

fn partial_cmp(&self, other: &SHA1) -> Option<Ordering>

This method returns an ordering between self and other values if one exists. Read more
1.0.0 · Source§

fn lt(&self, other: &Rhs) -> bool

Tests less than (for self and other) and is used by the < operator. Read more
1.0.0 · Source§

fn le(&self, other: &Rhs) -> bool

Tests less than or equal to (for self and other) and is used by the <= operator. Read more
1.0.0 · Source§

fn gt(&self, other: &Rhs) -> bool

Tests greater than (for self and other) and is used by the > operator. Read more
1.0.0 · Source§

fn ge(&self, other: &Rhs) -> bool

Tests greater than or equal to (for self and other) and is used by the >= operator. Read more
Source§

impl Serialize for SHA1

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl Copy for SHA1

Source§

impl Eq for SHA1

Source§

impl StructuralPartialEq for SHA1

Auto Trait Implementations§

§

impl Freeze for SHA1

§

impl RefUnwindSafe for SHA1

§

impl Send for SHA1

§

impl Sync for SHA1

§

impl Unpin for SHA1

§

impl UnwindSafe for SHA1

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> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<Q, K> Comparable<K> for Q
where Q: Ord + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn compare(&self, key: &K) -> Ordering

Compare self to key and return their ordering.
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Checks if this value is equivalent to the given key. Read more
Source§

impl<Q, K> Equivalent<K> for Q
where Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,

Source§

fn equivalent(&self, key: &K) -> bool

Compare self to key and return true if they are equal.
Source§

impl<T> FileLoadStore for T
where T: Serialize + for<'a> Deserialize<'a>,

Source§

fn f_load(path: &Path) -> Result<T, Error>

Source§

fn f_save(&self, path: &Path) -> Result<(), Error>

Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> FromRef<T> for T
where T: Clone,

Source§

fn from_ref(input: &T) -> T

Converts to this type from a reference to the input type.
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> MemSize for T
where T: HeapSize + ValueSize + ?Sized,

Source§

fn mem_size(&self) -> usize

The total size of this value in bytes. This includes the value itself as well as all owned referenced data (such as the value on the heap of a Box or the elements and reserved memory of a Vec). 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> PolicyExt for T
where T: ?Sized,

Source§

fn and<P, B, E>(self, other: P) -> And<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow only if self and other return Action::Follow. Read more
Source§

fn or<P, B, E>(self, other: P) -> Or<T, P>
where T: Policy<B, E>, P: Policy<B, E>,

Create a new Policy that returns Action::Follow if either self or other returns Action::Follow. Read more
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToHex for T
where T: AsRef<[u8]>,

Source§

fn encode_hex<U>(&self) -> U
where U: FromIterator<char>,

Encode the hex strict representing self into the result. Lower case letters are used (e.g. f9b4ca)
Source§

fn encode_hex_upper<U>(&self) -> U
where U: FromIterator<char>,

Encode the hex strict representing self into the result. Upper case letters are used (e.g. F9B4CA)
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T> ToStringFallible for T
where T: Display,

Source§

fn try_to_string(&self) -> Result<String, TryReserveError>

ToString::to_string, but without panic on OOM.

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<T> ArcWrapperBounds for T
where T: HeapSize + Serialize + for<'a> Deserialize<'a> + Send + Sync + 'static,

Source§

impl<T> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

Source§

impl<T> ErasedDestructor for T
where T: 'static,