Struct sc_network::multiaddr::multihash::MultihashGeneric
pub struct MultihashGeneric<const S: usize> { /* private fields */ }
Expand description
A Multihash instance that only supports the basic functionality and no hashing.
With this Multihash implementation you can operate on Multihashes in a generic way, but no hasher implementation is associated with the code.
Example
use multihash::Multihash;
const Sha3_256: u64 = 0x16;
let digest_bytes = [
0x16, 0x20, 0x64, 0x4b, 0xcc, 0x7e, 0x56, 0x43, 0x73, 0x04, 0x09, 0x99, 0xaa, 0xc8, 0x9e,
0x76, 0x22, 0xf3, 0xca, 0x71, 0xfb, 0xa1, 0xd9, 0x72, 0xfd, 0x94, 0xa3, 0x1c, 0x3b, 0xfb,
0xf2, 0x4e, 0x39, 0x38,
];
let mh = Multihash::from_bytes(&digest_bytes).unwrap();
assert_eq!(mh.code(), Sha3_256);
assert_eq!(mh.size(), 32);
assert_eq!(mh.digest(), &digest_bytes[2..]);
Implementations§
§impl<const S: usize> Multihash<S>
impl<const S: usize> Multihash<S>
pub const fn wrap(code: u64, input_digest: &[u8]) -> Result<Multihash<S>, Error>
pub const fn wrap(code: u64, input_digest: &[u8]) -> Result<Multihash<S>, Error>
Wraps the digest in a multihash.
pub fn read<R>(r: R) -> Result<Multihash<S>, Error>where
R: Read,
Multihash<S>: Sized,
pub fn read<R>(r: R) -> Result<Multihash<S>, Error>where R: Read, Multihash<S>: Sized,
Reads a multihash from a byte stream.
pub fn from_bytes(bytes: &[u8]) -> Result<Multihash<S>, Error>where
Multihash<S>: Sized,
pub fn from_bytes(bytes: &[u8]) -> Result<Multihash<S>, Error>where Multihash<S>: Sized,
Parses a multihash from a bytes.
You need to make sure the passed in bytes have the correct length. The digest length
needs to match the size
value of the multihash.
pub fn write<W>(&self, w: W) -> Result<(), Error>where
W: Write,
pub fn write<W>(&self, w: W) -> Result<(), Error>where W: Write,
Writes a multihash to a byte stream.
pub fn truncate(&self, size: u8) -> Multihash<S>
pub fn truncate(&self, size: u8) -> Multihash<S>
Truncates the multihash to the given size. It’s up to the caller to ensure that the new size is secure (cryptographically) to use.
If the new size is larger than the current size, this method does nothing.
use multihash::{Code, MultihashDigest};
let hash = Code::Sha3_256.digest(b"Hello world!").truncate(20);
pub fn resize<const R: usize>(&self) -> Result<Multihash<R>, Error>
pub fn resize<const R: usize>(&self) -> Result<Multihash<R>, Error>
Resizes the backing multihash buffer. This function fails if the hash digest is larger than the target size.
use multihash::{Code, MultihashDigest, MultihashGeneric};
let hash = Code::Sha3_256.digest(b"Hello world!");
let large_hash: MultihashGeneric<32> = hash.resize().unwrap();
pub fn into_inner(self) -> (u64, [u8; S], u8)
pub fn into_inner(self) -> (u64, [u8; S], u8)
Decomposes struct, useful when needing a Sized
array or moving all the data into another type
It is recommended to use digest()
code()
and size()
for most cases
use multihash::{Code, MultihashDigest};
struct Foo<const S: usize> {
arr: [u8; S],
len: usize,
}
let hash = Code::Sha3_256.digest(b"Hello world!");
let (.., arr, size) = hash.into_inner();
let foo = Foo { arr, len: size as usize };
Trait Implementations§
§impl<const S: usize> Ord for Multihash<S>
impl<const S: usize> Ord for Multihash<S>
§impl<const A: usize, const B: usize> PartialEq<Multihash<B>> for Multihash<A>
impl<const A: usize, const B: usize> PartialEq<Multihash<B>> for Multihash<A>
§impl<const S: usize> PartialOrd<Multihash<S>> for Multihash<S>
impl<const S: usize> PartialOrd<Multihash<S>> for Multihash<S>
§fn partial_cmp(&self, other: &Multihash<S>) -> Option<Ordering>
fn partial_cmp(&self, other: &Multihash<S>) -> Option<Ordering>
1.0.0 · source§fn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
self
and other
) and is used by the <=
operator. Read moreimpl<const S: usize> Copy for Multihash<S>
impl<const S: usize> Eq for Multihash<S>
impl<const S: usize> StructuralEq for Multihash<S>
Auto Trait Implementations§
impl<const S: usize> RefUnwindSafe for Multihash<S>
impl<const S: usize> Send for Multihash<S>
impl<const S: usize> Sync for Multihash<S>
impl<const S: usize> Unpin for Multihash<S>
impl<const S: usize> UnwindSafe for Multihash<S>
Blanket Implementations§
source§impl<T> CheckedConversion for T
impl<T> CheckedConversion for T
§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere T: Any,
§fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
.§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.§fn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
&Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s.§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
&mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s.source§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.§impl<Q, K> Equivalent<K> for Qwhere
Q: Eq + ?Sized,
K: Borrow<Q> + ?Sized,
impl<Q, K> Equivalent<K> for Qwhere Q: Eq + ?Sized, K: Borrow<Q> + ?Sized,
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T, Outer> IsWrappedBy<Outer> for Twhere
Outer: AsRef<T> + AsMut<T> + From<T>,
T: From<Outer>,
impl<T, Outer> IsWrappedBy<Outer> for Twhere Outer: AsRef<T> + AsMut<T> + From<T>, T: From<Outer>,
§impl<T> Pointable for T
impl<T> Pointable for T
source§impl<T> SaturatedConversion for T
impl<T> SaturatedConversion for T
source§fn saturated_from<T>(t: T) -> Selfwhere
Self: UniqueSaturatedFrom<T>,
fn saturated_from<T>(t: T) -> Selfwhere Self: UniqueSaturatedFrom<T>,
source§fn saturated_into<T>(self) -> Twhere
Self: UniqueSaturatedInto<T>,
fn saturated_into<T>(self) -> Twhere Self: UniqueSaturatedInto<T>,
T
. Read moresource§impl<S, T> UncheckedInto<T> for Swhere
T: UncheckedFrom<S>,
impl<S, T> UncheckedInto<T> for Swhere T: UncheckedFrom<S>,
source§fn unchecked_into(self) -> T
fn unchecked_into(self) -> T
unchecked_from
.source§impl<T, S> UniqueSaturatedInto<T> for Swhere
T: Bounded,
S: TryInto<T>,
impl<T, S> UniqueSaturatedInto<T> for Swhere T: Bounded, S: TryInto<T>,
source§fn unique_saturated_into(self) -> T
fn unique_saturated_into(self) -> T
T
.