ExpressionNode

Enum ExpressionNode 

Source
pub enum ExpressionNode<F: Field, E: ExpressionType<F>> {
    Constant(F),
    Selector(MleIndex<F>, Box<ExpressionNode<F, E>>, Box<ExpressionNode<F, E>>),
    Mle(E::MLENodeRepr),
    Sum(Box<ExpressionNode<F, E>>, Box<ExpressionNode<F, E>>),
    Product(Vec<E::MLENodeRepr>),
    Scaled(Box<ExpressionNode<F, E>>, F),
}
Expand description

ExpressionNode can be made up of the following:

Variants§

§

Constant(F)

See documentation for ExpressionNode. Note that ExpressionNode::Constant can be an expression tree’s leaf.

§

Selector(MleIndex<F>, Box<ExpressionNode<F, E>>, Box<ExpressionNode<F, E>>)

See documentation for ExpressionNode.

§

Mle(E::MLENodeRepr)

An ExpressionNode representing the leaf of an expression tree which is actually mathematically defined as a multilinear extension.

§

Sum(Box<ExpressionNode<F, E>>, Box<ExpressionNode<F, E>>)

See documentation for ExpressionNode.

§

Product(Vec<E::MLENodeRepr>)

The product of several multilinear extension functions. This is also an expression tree’s leaf.

§

Scaled(Box<ExpressionNode<F, E>>, F)

See documentation for ExpressionNode.

Implementations§

Source§

impl<F: Field> ExpressionNode<F, ExprDescription>

Source

pub fn into_verifier_node( &self, point: &[F], transcript_reader: &mut impl VerifierTranscript<F>, ) -> Result<ExpressionNode<F, VerifierExpr>>

Turn this expression into a VerifierExpr which represents a fully bound expression. Should only be applicable after a full layer of sumcheck.

Source

pub fn compute_bookkeeping_table( &self, circuit_map: &CircuitEvalMap<F>, ) -> Option<MultilinearExtension<F>>

Compute the expression-wise bookkeeping table (coefficients of the MLE representing the expression) for a given ExprDescription. This uses a CircuitEvalMap in order to grab the correct data corresponding to the MleDescription.

Source

pub fn reduce<T>( &self, constant: &mut impl FnMut(F) -> T, selector_column: &mut impl FnMut(&MleIndex<F>, T, T) -> T, mle_eval: &mut impl FnMut(&<ExprDescription as ExpressionType<F>>::MLENodeRepr) -> T, sum: &mut impl FnMut(T, T) -> T, product: &mut impl FnMut(&[<ExprDescription as ExpressionType<F>>::MLENodeRepr]) -> T, scaled: &mut impl FnMut(T, F) -> T, ) -> T

Evaluate the polynomial using the provided closures to perform the operations.

Source

pub fn get_all_nonlinear_rounds( &self, curr_nonlinear_indices: &mut Vec<usize>, _mle_vec: &<ExprDescription as ExpressionType<F>>::MleVec, ) -> Vec<usize>

Traverse an expression tree in order and returns a vector of indices of all the nonlinear rounds in an expression (in no particular order).

Source

pub(crate) fn get_all_rounds( &self, curr_indices: &mut Vec<usize>, _mle_vec: &<ExprDescription as ExpressionType<F>>::MleVec, ) -> Vec<usize>

This function traverses an expression tree in order to determine what are the labels for the variables in the expression.

Source

pub fn get_circuit_mles(&self) -> Vec<&MleDescription<F>>

Get all the MleDescriptions, recursively, for this expression by adding the MLEs in the leaves into the vector of MleDescriptions.

Source

pub fn index_mle_vars(&mut self, start_index: usize)

Label the MLE indices of an expression, starting from the start_index.

Source

pub fn into_prover_expression( &self, circuit_map: &CircuitEvalMap<F>, ) -> Expression<F, ProverExpr>

Get the ExpressionNode<F, ProverExpr> recursively, for this expression.

Source

pub fn get_post_sumcheck_layer( &self, multiplier: F, challenges: &[F], _mle_vec: &<VerifierExpr as ExpressionType<F>>::MleVec, ) -> PostSumcheckLayer<F, Option<F>>

Recursively get the PostSumcheckLayer for an Expression node, which is the fully bound representation of an expression. Relevant for the Hyrax IP, where we need commitments to fully bound MLEs as well as their intermediate products.

Source

fn get_max_degree( &self, _mle_vec: &<ExprDescription as ExpressionType<F>>::MleVec, ) -> usize

Get the maximum degree of an ExpressionNode, recursively.

Source

fn get_num_vars(&self) -> usize

Returns the total number of variables (i.e. number of rounds of sumcheck) within the MLE representing the output “data” of this particular expression.

Note that unlike within the AbstractExpr case, we don’t need to return a Result since all MLEs within a ExprDescription are instantiated with their appropriate number of variables.

Source§

impl<F: Field, E: ExpressionType<F>> ExpressionNode<F, E>

Generic helper methods shared across all types of ExpressionNodes.

Source

pub fn traverse_node( &self, observer_fn: &mut impl FnMut(&ExpressionNode<F, E>, &E::MleVec) -> Result<()>, mle_vec: &E::MleVec, ) -> Result<()>

traverse the expression tree, and applies the observer_fn to all child node / the mle_vec reference

Source

pub fn traverse_node_mut( &mut self, observer_fn: &mut impl FnMut(&mut ExpressionNode<F, E>, &mut E::MleVec) -> Result<()>, mle_vec: &mut E::MleVec, ) -> Result<()>

similar to traverse, but allows mutation of self (expression node and mle_vec)

Source§

impl<F: Field> ExpressionNode<F, ProverExpr>

Source

pub fn transform_to_verifier_expression_node( &mut self, mle_vec: &<ProverExpr as ExpressionType<F>>::MleVec, ) -> Result<ExpressionNode<F, VerifierExpr>>

Transforms the expression to a verifier expression should only be called when no variables are bound in the expression. Traverses the expression and changes the DenseMle to MleDescription.

Source

pub fn fix_variable_node( &mut self, round_index: usize, challenge: F, mle_vec: &mut <ProverExpr as ExpressionType<F>>::MleVec, )

fix the variable at a certain round index, always the most significant index.

Source

pub fn fix_variable_at_index_node( &mut self, round_index: usize, challenge: F, mle_vec: &mut <ProverExpr as ExpressionType<F>>::MleVec, )

fix the variable at a certain round index, can be arbitrary indices.

Source

pub fn evaluate_sumcheck_node_beta_cascade_sum( &self, beta_values: &BetaValues<F>, round_index: usize, degree: usize, mle_vec: &<ProverExpr as ExpressionType<F>>::MleVec, ) -> SumcheckEvals<F>

Source

pub fn evaluate_sumcheck_node_beta_cascade( &self, beta_vec: &[&BetaValues<F>], mle_vec: &<ProverExpr as ExpressionType<F>>::MleVec, random_coefficients: &[F], round_index: usize, degree: usize, ) -> SumcheckEvals<F>

This is the function to compute a single-round sumcheck message using the beta cascade algorithm.

§Arguments
  • expr: the Expression P defining a GKR layer. The caller is expected to have already fixed the variables of previous rounds.
  • round_index: the MLE index corresponding to the variable that is going to be the independent variable for this round. The caller is expected to have already fixed variables 1 .. (round_index - 1) in expression P to the verifier’s challanges.
  • max_degree: the degree of the polynomial to be exchanged in this round’s sumcheck message.
  • beta_value: the beta function associated with expression exp. It is the caller’s responsibility to keep this consistent with expr before/after each call.

In particular, if round_index == k, and the current GKR layer expression was originally on n variables, expr is expected to represent a polynomial expression on n - k + 1 variables: P(r_1, r_2, ..., r_{k-1}, x_k, x_{k+1}, ..., x_n): F^{n - k + 1} -> F, with the first k - 1 free variables already fixed to random challenges r_1, ..., r_{k-1}. Similarly, beta_values should represent the polynomial: \beta(r_1, ..., r_{k-1}, b_k, ..., b_n, g_1, ..., g_n) whose unbound variables are b_k, ..., b_n.

§Returns

If successful, this functions returns a representation of the univariate polynomial:

    g_{round_index}(x) =
        \sum_{b_{k+1} \in {0, 1}}
        \sum_{b_{k+2} \in {0, 1}}
            ...
        \sum_{b_{n} \in {0, 1}}
            \beta(r_1, ..., r_k, x, b_{k+1}, ..., b_{n}, g_1, ..., g_n)
                * P(r_1, ..., r_k, x, b_{k+1}, ..., b_n)
  1. This function should be responsible for mutating expr and beta_values by fixing variables (if any) after the sumcheck round. It should maintain the invariant that expr and beta_values are consistent with each other!
  2. max_degree should NOT be the caller’s responsibility to compute. The degree should be determined through expr and round_index. It is error-prone to allow for sumcheck message to go through with an arbitrary degree.
§Beta cascade

Instead of using a beta table to linearize an expression, we utilize the fact that for each specific node in an expression tree, we only need exactly the beta values corresponding to the indices present in that node.

Source

pub fn index_mle_indices_node( &mut self, curr_index: usize, mle_vec: &mut <ProverExpr as ExpressionType<F>>::MleVec, ) -> usize

Mutate the MLE indices that are MleIndex::Free in the expression and turn them into MleIndex::Indexed. Returns the max number of bits that are indexed.

Source

pub(crate) fn get_all_rounds( &self, mle_vec: &<ProverExpr as ExpressionType<F>>::MleVec, ) -> Vec<usize>

this traverses the expression to get all of the rounds, in total. requires going through each of the nodes and collecting the leaf node indices.

Source

pub fn get_all_nonlinear_rounds( &self, mle_vec: &<ProverExpr as ExpressionType<F>>::MleVec, ) -> Vec<usize>

traverse an expression tree in order to get all of the nonlinear rounds in an expression.

Source

pub fn get_all_linear_rounds( &self, mle_vec: &<ProverExpr as ExpressionType<F>>::MleVec, ) -> Vec<usize>

get all of the linear rounds from an expression tree

Source

fn get_rounds_helper( &self, mle_vec: &<ProverExpr as ExpressionType<F>>::MleVec, ) -> Vec<usize>

Source

pub fn get_expression_num_free_variables_node( &self, curr_size: usize, mle_vec: &<ProverExpr as ExpressionType<F>>::MleVec, ) -> usize

Gets the number of free variables in an expression.

Source

pub fn get_post_sumcheck_layer( &self, multiplier: F, mle_vec: &<ProverExpr as ExpressionType<F>>::MleVec, ) -> PostSumcheckLayer<F, F>

Recursively get the PostSumcheckLayer for an Expression node, which is the fully bound representation of an expression. Relevant for the Hyrax IP, where we need commitments to fully bound MLEs as well as their intermediate products.

Source

fn get_max_degree( &self, _mle_vec: &<ProverExpr as ExpressionType<F>>::MleVec, ) -> usize

Get the maximum degree of an ExpressionNode, recursively.

Source§

impl<F: Field> ExpressionNode<F, VerifierExpr>

Source

pub fn reduce<T>( &self, constant: &impl Fn(F) -> T, selector_column: &impl Fn(&MleIndex<F>, T, T) -> T, mle_eval: &impl Fn(&<VerifierExpr as ExpressionType<F>>::MLENodeRepr) -> T, sum: &impl Fn(T, T) -> T, product: &impl Fn(&[<VerifierExpr as ExpressionType<F>>::MLENodeRepr]) -> T, scaled: &impl Fn(T, F) -> T, ) -> T

Evaluate the polynomial using the provided closures to perform the operations.

Source

pub fn get_all_nonlinear_rounds( &self, curr_nonlinear_indices: &mut Vec<usize>, _mle_vec: &<VerifierExpr as ExpressionType<F>>::MleVec, ) -> Vec<usize>

Traverse an expression tree in order and returns a vector of indices of all the nonlinear rounds in an expression (in no particular order).

Trait Implementations§

Source§

impl<F: Clone + Field, E: Clone + ExpressionType<F>> Clone for ExpressionNode<F, E>
where E::MLENodeRepr: Clone,

Source§

fn clone(&self) -> ExpressionNode<F, E>

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<F: Debug + Field> Debug for ExpressionNode<F, ExprDescription>

Source§

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

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

impl<F: Debug + Field> Debug for ExpressionNode<F, ProverExpr>

Source§

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

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

impl<F: Debug + Field> Debug for ExpressionNode<F, VerifierExpr>

Source§

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

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

impl<'de, F, E: ExpressionType<F>> Deserialize<'de> for ExpressionNode<F, E>
where F: Field,

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<F: Hash + Field, E: Hash + ExpressionType<F>> Hash for ExpressionNode<F, E>
where E::MLENodeRepr: Hash,

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<F: PartialEq + Field, E: PartialEq + ExpressionType<F>> PartialEq for ExpressionNode<F, E>

Source§

fn eq(&self, other: &ExpressionNode<F, E>) -> 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<F, E: ExpressionType<F>> Serialize for ExpressionNode<F, E>
where F: Field,

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<F: Eq + Field, E: Eq + ExpressionType<F>> Eq for ExpressionNode<F, E>
where E::MLENodeRepr: Eq,

Source§

impl<F: Field, E: ExpressionType<F>> StructuralPartialEq for ExpressionNode<F, E>

Auto Trait Implementations§

§

impl<F, E> Freeze for ExpressionNode<F, E>
where F: Freeze, <E as ExpressionType<F>>::MLENodeRepr: Freeze,

§

impl<F, E> RefUnwindSafe for ExpressionNode<F, E>

§

impl<F, E> Send for ExpressionNode<F, E>
where <E as ExpressionType<F>>::MLENodeRepr: Send,

§

impl<F, E> Sync for ExpressionNode<F, E>
where <E as ExpressionType<F>>::MLENodeRepr: Sync,

§

impl<F, E> Unpin for ExpressionNode<F, E>
where F: Unpin, <E as ExpressionType<F>>::MLENodeRepr: Unpin,

§

impl<F, E> UnwindSafe for ExpressionNode<F, E>

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
§

impl<T> Conv for T

§

fn conv<T>(self) -> T
where Self: Into<T>,

Converts self into T using Into<T>. Read more
Source§

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

§

impl<T> FmtForward for T

§

fn fmt_binary(self) -> FmtBinary<Self>
where Self: Binary,

Causes self to use its Binary implementation when Debug-formatted.
§

fn fmt_display(self) -> FmtDisplay<Self>
where Self: Display,

Causes self to use its Display implementation when Debug-formatted.
§

fn fmt_lower_exp(self) -> FmtLowerExp<Self>
where Self: LowerExp,

Causes self to use its LowerExp implementation when Debug-formatted.
§

fn fmt_lower_hex(self) -> FmtLowerHex<Self>
where Self: LowerHex,

Causes self to use its LowerHex implementation when Debug-formatted.
§

fn fmt_octal(self) -> FmtOctal<Self>
where Self: Octal,

Causes self to use its Octal implementation when Debug-formatted.
§

fn fmt_pointer(self) -> FmtPointer<Self>
where Self: Pointer,

Causes self to use its Pointer implementation when Debug-formatted.
§

fn fmt_upper_exp(self) -> FmtUpperExp<Self>
where Self: UpperExp,

Causes self to use its UpperExp implementation when Debug-formatted.
§

fn fmt_upper_hex(self) -> FmtUpperHex<Self>
where Self: UpperHex,

Causes self to use its UpperHex implementation when Debug-formatted.
§

fn fmt_list(self) -> FmtList<Self>
where &'a Self: for<'a> IntoIterator,

Formats each item in a sequence. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

§

impl<T> Instrument for T

§

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

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

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
§

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

§

fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> R
where Self: Sized,

Pipes by value. This is generally the method you want to use. Read more
§

fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> R
where R: 'a,

Borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> R
where R: 'a,

Mutably borrows self and passes that borrow into the pipe function. Read more
§

fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
where Self: Borrow<B>, B: 'a + ?Sized, R: 'a,

Borrows self, then passes self.borrow() into the pipe function. Read more
§

fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
where Self: BorrowMut<B>, B: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.borrow_mut() into the pipe function. Read more
§

fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
where Self: AsRef<U>, U: 'a + ?Sized, R: 'a,

Borrows self, then passes self.as_ref() into the pipe function.
§

fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
where Self: AsMut<U>, U: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.as_mut() into the pipe function.
§

fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
where Self: Deref<Target = T>, T: 'a + ?Sized, R: 'a,

Borrows self, then passes self.deref() into the pipe function.
§

fn pipe_deref_mut<'a, T, R>( &'a mut self, func: impl FnOnce(&'a mut T) -> R, ) -> R
where Self: DerefMut<Target = T> + Deref, T: 'a + ?Sized, R: 'a,

Mutably borrows self, then passes self.deref_mut() into the pipe function.
§

impl<T> Pointable for T

§

const ALIGN: usize

The alignment of pointer.
§

type Init = T

The type for initializers.
§

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

Initializes a with the given initializer. Read more
§

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

Dereferences the given pointer. Read more
§

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

Mutably dereferences the given pointer. Read more
§

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
§

impl<T> Tap for T

§

fn tap(self, func: impl FnOnce(&Self)) -> Self

Immutable access to a value. Read more
§

fn tap_mut(self, func: impl FnOnce(&mut Self)) -> Self

Mutable access to a value. Read more
§

fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Immutable access to the Borrow<B> of a value. Read more
§

fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Mutable access to the BorrowMut<B> of a value. Read more
§

fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Immutable access to the AsRef<R> view of a value. Read more
§

fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Mutable access to the AsMut<R> view of a value. Read more
§

fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Immutable access to the Deref::Target of a value. Read more
§

fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Mutable access to the Deref::Target of a value. Read more
§

fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self

Calls .tap() only in debug builds, and is erased in release builds.
§

fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self

Calls .tap_mut() only in debug builds, and is erased in release builds.
§

fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
where Self: Borrow<B>, B: ?Sized,

Calls .tap_borrow() only in debug builds, and is erased in release builds.
§

fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
where Self: BorrowMut<B>, B: ?Sized,

Calls .tap_borrow_mut() only in debug builds, and is erased in release builds.
§

fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
where Self: AsRef<R>, R: ?Sized,

Calls .tap_ref() only in debug builds, and is erased in release builds.
§

fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
where Self: AsMut<R>, R: ?Sized,

Calls .tap_ref_mut() only in debug builds, and is erased in release builds.
§

fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
where Self: Deref<Target = T>, T: ?Sized,

Calls .tap_deref() only in debug builds, and is erased in release builds.
§

fn tap_deref_mut_dbg<T>(self, func: impl FnOnce(&mut T)) -> Self
where Self: DerefMut<Target = T> + Deref, T: ?Sized,

Calls .tap_deref_mut() only in debug builds, and is erased in release builds.
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
§

impl<T> TryConv for T

§

fn try_conv<T>(self) -> Result<T, Self::Error>
where Self: TryInto<T>,

Attempts to convert self into T using TryInto<T>. Read more
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.
§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

§

fn vzip(self) -> V

§

impl<T> WithSubscriber for T

§

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
§

fn with_current_subscriber(self) -> WithDispatch<Self>

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

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

§

impl<T> SyncDeps for T