pub struct GenericSdk<E, VB, NativeBuilder>{ /* private fields */ }
Expand description
The SDK provides convenience methods and constructors for provers.
The SDK is stateful to cache results of computations that depend only on the App VM config and aggregation config. The SDK will not cache any state that depends on the program executable.
Some commonly used methods are:
Implementations§
Source§impl<E, VB, NativeBuilder> GenericSdk<E, VB, NativeBuilder>
impl<E, VB, NativeBuilder> GenericSdk<E, VB, NativeBuilder>
pub fn app_config(&self) -> &AppConfig<VB::VmConfig>
pub fn agg_config(&self) -> &AggregationConfig
pub fn agg_tree_config(&self) -> &AggregationTreeConfig
pub fn halo2_config(&self) -> &Halo2Config
Sourcepub fn executor(&self) -> &VmExecutor<F, VB::VmConfig>
pub fn executor(&self) -> &VmExecutor<F, VB::VmConfig>
The executor
may be used to construct different types of interpreters, given the program,
for more specific execution purposes. By default, it is recommended to use the
execute
method.
pub fn halo2_params_reader(&self) -> &CacheHalo2ParamsReader
pub fn app_vm_builder(&self) -> &VB
pub fn native_builder(&self) -> &NativeBuilder
Source§impl<E, VB, NativeBuilder> GenericSdk<E, VB, NativeBuilder>
impl<E, VB, NativeBuilder> GenericSdk<E, VB, NativeBuilder>
pub fn app_config_mut(&mut self) -> &mut AppConfig<VB::VmConfig>
pub fn agg_config_mut(&mut self) -> &mut AggregationConfig
pub fn agg_tree_config_mut(&mut self) -> &mut AggregationTreeConfig
pub fn halo2_config_mut(&mut self) -> &mut Halo2Config
pub fn halo2_params_reader_mut(&mut self) -> &mut CacheHalo2ParamsReader
Source§impl<E, VB, NativeBuilder> GenericSdk<E, VB, NativeBuilder>
impl<E, VB, NativeBuilder> GenericSdk<E, VB, NativeBuilder>
pub fn with_app_config(self, val: AppConfig<VB::VmConfig>) -> Self
pub fn with_agg_config(self, val: AggregationConfig) -> Self
pub fn with_agg_tree_config(self, val: AggregationTreeConfig) -> Self
pub fn with_halo2_config(self, val: Halo2Config) -> Self
pub fn with_halo2_params_reader(self, val: CacheHalo2ParamsReader) -> Self
Source§impl<E, VB, NativeBuilder> GenericSdk<E, VB, NativeBuilder>where
E: StarkFriEngine<SC = SC>,
VB: VmBuilder<E, VmConfig = SdkVmConfig> + Clone + Default,
NativeBuilder: Clone + Default,
impl<E, VB, NativeBuilder> GenericSdk<E, VB, NativeBuilder>where
E: StarkFriEngine<SC = SC>,
VB: VmBuilder<E, VmConfig = SdkVmConfig> + Clone + Default,
NativeBuilder: Clone + Default,
Sourcepub fn standard() -> Self
pub fn standard() -> Self
Creates SDK with a standard configuration that includes a set of default VM extensions loaded.
Note: To use this configuration, your openvm.toml
must match, including the order of
the moduli and elliptic curve parameters of the respective extensions:
The app_vm_config
field of your openvm.toml
must exactly match the following:
[app_vm_config.rv32i]
[app_vm_config.rv32m]
[app_vm_config.io]
[app_vm_config.keccak]
[app_vm_config.sha256]
[app_vm_config.bigint]
[app_vm_config.modular]
supported_moduli = [
# bn254 (alt bn128)
"21888242871839275222246405745257275088696311157297823662689037894645226208583", # coordinate field
"21888242871839275222246405745257275088548364400416034343698204186575808495617", # scalar field
# secp256k1 (k256)
"115792089237316195423570985008687907853269984665640564039457584007908834671663", # coordinate field
"115792089237316195423570985008687907852837564279074904382605163141518161494337", # scalar field
# secp256r1 (p256)
"115792089210356248762697446949407573530086143415290314195533631308867097853951", # coordinate
"115792089210356248762697446949407573529996955224135760342422259061068512044369", # scalar
# bls12_381
"4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787", # coordinate field
"52435875175126190479447740508185965837690552500527637822603658699938581184513", # scalar field
]
[app_vm_config.fp2]
supported_moduli = [
[
"Bn254Fp2",
# bn254 (alt bn128)
"21888242871839275222246405745257275088696311157297823662689037894645226208583",
],
# Bls12_381
[
"Bls12_381Fp2",
"4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787",
],
]
# bn254 (alt bn128)
[[app_vm_config.ecc.supported_curves]]
struct_name = "Bn254G1Affine"
modulus = "21888242871839275222246405745257275088696311157297823662689037894645226208583"
scalar = "21888242871839275222246405745257275088548364400416034343698204186575808495617"
a = "0"
b = "3"
# secp256k1 (k256)
[[app_vm_config.ecc.supported_curves]]
struct_name = "Secp256k1Point"
modulus = "115792089237316195423570985008687907853269984665640564039457584007908834671663"
scalar = "115792089237316195423570985008687907852837564279074904382605163141518161494337"
a = "0"
b = "7"
# secp256r1 (p256)
[[app_vm_config.ecc.supported_curves]]
struct_name = "P256Point"
modulus = "115792089210356248762697446949407573530086143415290314195533631308867097853951"
scalar = "115792089210356248762697446949407573529996955224135760342422259061068512044369"
a = "115792089210356248762697446949407573530086143415290314195533631308867097853948"
b = "41058363725152142129326129780047268409114441015993725554835256314039467401291"
# bls12_381
[[app_vm_config.ecc.supported_curves]]
struct_name = "Bls12_381G1Affine"
modulus = "4002409555221667393417789825735904156556882819939007885332058136124031650490837864442687629129015664037894272559787"
scalar = "52435875175126190479447740508185965837690552500527637822603658699938581184513"
a = "0"
b = "4"
[app_vm_config.pairing]
supported_curves = ["Bn254", "Bls12_381"]
Source§impl<E, VB, NativeBuilder> GenericSdk<E, VB, NativeBuilder>
impl<E, VB, NativeBuilder> GenericSdk<E, VB, NativeBuilder>
Sourcepub fn new(app_config: AppConfig<VB::VmConfig>) -> Result<Self, SdkError>
pub fn new(app_config: AppConfig<VB::VmConfig>) -> Result<Self, SdkError>
Creates SDK custom to the given AppConfig, with a RISC-V transpiler.
Sourcepub fn new_without_transpiler(
app_config: AppConfig<VB::VmConfig>,
) -> Result<Self, SdkError>
pub fn new_without_transpiler( app_config: AppConfig<VB::VmConfig>, ) -> Result<Self, SdkError>
Note: This function does not set the transpiler, which must be done separately to support RISC-V ELFs.
Sourcepub fn build<P: AsRef<Path>>(
&self,
guest_opts: GuestOptions,
pkg_dir: P,
target_filter: &Option<TargetFilter>,
init_file_name: Option<&str>,
) -> Result<Elf, SdkError>
pub fn build<P: AsRef<Path>>( &self, guest_opts: GuestOptions, pkg_dir: P, target_filter: &Option<TargetFilter>, init_file_name: Option<&str>, ) -> Result<Elf, SdkError>
Builds the guest package located at pkg_dir
. This function requires that the build target
is unique and errors otherwise. Returns the built ELF file decoded in the Elf type.
Sourcepub fn transpiler(&self) -> Result<&Transpiler<F>, SdkError>
pub fn transpiler(&self) -> Result<&Transpiler<F>, SdkError>
Transpiler for transpiling RISC-V ELF to OpenVM executable.
pub fn set_transpiler(&mut self, transpiler: Transpiler<F>)
pub fn with_transpiler(self, transpiler: Transpiler<F>) -> Self
pub fn convert_to_exe( &self, executable: impl Into<ExecutableFormat>, ) -> Result<Arc<VmExe<F>>, SdkError>
Source§impl<E, VB, NativeBuilder> GenericSdk<E, VB, NativeBuilder>where
E: StarkFriEngine<SC = SC>,
VB: VmBuilder<E> + Clone,
<VB::VmConfig as VmExecutionConfig<F>>::Executor: Executor<F> + MeteredExecutor<F> + PreflightExecutor<F, VB::RecordArena>,
NativeBuilder: VmBuilder<E, VmConfig = NativeConfig> + Clone,
<NativeConfig as VmExecutionConfig<F>>::Executor: PreflightExecutor<F, <NativeBuilder as VmBuilder<E>>::RecordArena>,
impl<E, VB, NativeBuilder> GenericSdk<E, VB, NativeBuilder>where
E: StarkFriEngine<SC = SC>,
VB: VmBuilder<E> + Clone,
<VB::VmConfig as VmExecutionConfig<F>>::Executor: Executor<F> + MeteredExecutor<F> + PreflightExecutor<F, VB::RecordArena>,
NativeBuilder: VmBuilder<E, VmConfig = NativeConfig> + Clone,
<NativeConfig as VmExecutionConfig<F>>::Executor: PreflightExecutor<F, <NativeBuilder as VmBuilder<E>>::RecordArena>,
Sourcepub fn execute(
&self,
app_exe: impl Into<ExecutableFormat>,
inputs: StdIn,
) -> Result<Vec<u8>, SdkError>
pub fn execute( &self, app_exe: impl Into<ExecutableFormat>, inputs: StdIn, ) -> Result<Vec<u8>, SdkError>
Returns the user public values as field elements.
Sourcepub fn execute_metered(
&self,
app_exe: impl Into<ExecutableFormat>,
inputs: StdIn,
) -> Result<(Vec<u8>, Vec<Segment>), SdkError>
pub fn execute_metered( &self, app_exe: impl Into<ExecutableFormat>, inputs: StdIn, ) -> Result<(Vec<u8>, Vec<Segment>), SdkError>
Executes with segmentation for proof generation. Returns both user public values and segments with instruction counts and trace heights.
Sourcepub fn execute_metered_cost(
&self,
app_exe: impl Into<ExecutableFormat>,
inputs: StdIn,
) -> Result<(Vec<u8>, (u64, u64)), SdkError>
pub fn execute_metered_cost( &self, app_exe: impl Into<ExecutableFormat>, inputs: StdIn, ) -> Result<(Vec<u8>, (u64, u64)), SdkError>
Executes with cost metering to measure computational cost in trace cells. Returns both user public values, and cost along with instruction count.
Sourcepub fn prove(
&self,
app_exe: impl Into<ExecutableFormat>,
inputs: StdIn,
) -> Result<(VmStarkProof<SC>, AppExecutionCommit), SdkError>
pub fn prove( &self, app_exe: impl Into<ExecutableFormat>, inputs: StdIn, ) -> Result<(VmStarkProof<SC>, AppExecutionCommit), SdkError>
Generates a single aggregate STARK proof of the full program execution of the given
app_exe
with program inputs inputs
.
The returned STARK proof is not intended for EVM verification. For EVM verification, use the
prove_evm
method, which requires the "evm-prove"
feature to be
enabled.
For convenience, this function also returns the AppExecutionCommit, which is a full
commitment to the App VM config and the App VmExe. It does not depend on the inputs
.
It can be generated separately from the proof by creating a
prover
and calling
app_commit
.
If STARK aggregation is not needed and a proof whose size may grow linearly with the length
of the program runtime is desired, create an app_prover
and call
app_prover.prove(inputs)
.
pub fn prove_evm( &self, app_exe: impl Into<ExecutableFormat>, inputs: StdIn, ) -> Result<EvmProof, SdkError>
Sourcepub fn prover(
&self,
app_exe: impl Into<ExecutableFormat>,
) -> Result<StarkProver<E, VB, NativeBuilder>, SdkError>
pub fn prover( &self, app_exe: impl Into<ExecutableFormat>, ) -> Result<StarkProver<E, VB, NativeBuilder>, SdkError>
Constructs a new StarkProver instance for the given executable. This function will generate the AppProvingKey and AggProvingKey if they do not already exist.
pub fn evm_prover( &self, app_exe: impl Into<ExecutableFormat>, ) -> Result<EvmHalo2Prover<E, VB, NativeBuilder>, SdkError>
Sourcepub fn app_prover(
&self,
exe: impl Into<ExecutableFormat>,
) -> Result<AppProver<E, VB>, SdkError>
pub fn app_prover( &self, exe: impl Into<ExecutableFormat>, ) -> Result<AppProver<E, VB>, SdkError>
This constructor is for generating app proofs that do not require a single aggregate STARK
proof of the full program execution. For a single STARK proof, use the
prove
method instead.
Creates an app prover instance specific to the provided exe. This function will generate the AppProvingKey if it doesn’t already exist and use it to construct the AppProver.
Sourcepub fn app_keygen(&self) -> (AppProvingKey<VB::VmConfig>, AppVerifyingKey)
pub fn app_keygen(&self) -> (AppProvingKey<VB::VmConfig>, AppVerifyingKey)
Generates the app proving key once and caches it. Future calls will return the cached key.
§Panics
This function will panic if the app keygen fails.
Sourcepub fn app_pk(&self) -> &AppProvingKey<VB::VmConfig>
pub fn app_pk(&self) -> &AppProvingKey<VB::VmConfig>
Generates the app proving key once and caches it. Future calls will return the cached key.
§Panics
This function will panic if the app keygen fails.
Sourcepub fn set_app_pk(
&self,
app_pk: AppProvingKey<VB::VmConfig>,
) -> Result<(), AppProvingKey<VB::VmConfig>>
pub fn set_app_pk( &self, app_pk: AppProvingKey<VB::VmConfig>, ) -> Result<(), AppProvingKey<VB::VmConfig>>
Sets the app proving key. Returns Ok(())
if app keygen has not been called and
Err(app_pk)
if keygen has already been called.
Sourcepub fn with_app_pk(self, app_pk: AppProvingKey<VB::VmConfig>) -> Self
pub fn with_app_pk(self, app_pk: AppProvingKey<VB::VmConfig>) -> Self
See set_app_pk
. This should only be used in a constructor, and panics
if app keygen has already been called.
Sourcepub fn agg_keygen(&self) -> Result<(AggProvingKey, AggVerifyingKey), SdkError>
pub fn agg_keygen(&self) -> Result<(AggProvingKey, AggVerifyingKey), SdkError>
Generates the proving keys necessary for STARK aggregation. Generates the proving keys once
and caches them. Future calls will return the cached key. This function does not include
app_keygen
, which is specific to the App VM config. The proving keys
generated in this step are independent of the App VM config.
§Panics
This function will panic if the keygen fails.
pub fn agg_pk(&self) -> &AggProvingKey
Sourcepub fn set_agg_pk(&self, agg_pk: AggProvingKey) -> Result<(), AggProvingKey>
pub fn set_agg_pk(&self, agg_pk: AggProvingKey) -> Result<(), AggProvingKey>
Sets the aggregation proving keys. Returns Ok(())
if agg keygen has not been called and
Err(agg_pk)
if keygen has already been called.
Sourcepub fn with_agg_pk(self, agg_pk: AggProvingKey) -> Self
pub fn with_agg_pk(self, agg_pk: AggProvingKey) -> Self
See set_agg_pk
. This should only be used in a constructor, and panics
if app keygen has already been called.
pub fn agg_pk_and_dummy_internal_proof(&self) -> (&AggProvingKey, &Proof<SC>)
pub fn generate_root_verifier_asm(&self) -> String
pub fn halo2_keygen(&self) -> Halo2ProvingKey
pub fn halo2_pk(&self) -> &Halo2ProvingKey
Sourcepub fn set_halo2_pk(
&self,
halo2_pk: Halo2ProvingKey,
) -> Result<(), Halo2ProvingKey>
pub fn set_halo2_pk( &self, halo2_pk: Halo2ProvingKey, ) -> Result<(), Halo2ProvingKey>
Sets the halo2 proving keys. Returns Ok(())
if halo2 keygen has not been called and
Err(halo2_pk)
if keygen has already been called.
Sourcepub fn with_halo2_pk(self, halo2_pk: Halo2ProvingKey) -> Self
pub fn with_halo2_pk(self, halo2_pk: Halo2ProvingKey) -> Self
See set_halo2_pk
. This should only be used in a constructor, and
panics if halo2 keygen has already been called.
pub fn with_halo2_params_dir(self, params_dir: impl AsRef<Path>) -> Self
pub fn set_halo2_params_dir(&mut self, params_dir: impl AsRef<Path>)
Sourcepub fn verify_proof(
agg_vk: &AggVerifyingKey,
expected_app_commit: AppExecutionCommit,
proof: &VmStarkProof<SC>,
) -> Result<(), SdkError>
pub fn verify_proof( agg_vk: &AggVerifyingKey, expected_app_commit: AppExecutionCommit, proof: &VmStarkProof<SC>, ) -> Result<(), SdkError>
Verifies aggregate STARK proof of VM execution.
Note: This function does not have any reliance on self
and does not depend on the app
config set in the Sdk.
pub fn generate_halo2_verifier_solidity( &self, ) -> Result<EvmHalo2Verifier, SdkError>
Sourcepub fn verify_evm_halo2_proof(
openvm_verifier: &EvmHalo2Verifier,
evm_proof: EvmProof,
) -> Result<u64, SdkError>
pub fn verify_evm_halo2_proof( openvm_verifier: &EvmHalo2Verifier, evm_proof: EvmProof, ) -> Result<u64, SdkError>
Uses the verify(..)
interface of the OpenVmHalo2Verifier
contract.
Auto Trait Implementations§
impl<E, VB, NativeBuilder> !Freeze for GenericSdk<E, VB, NativeBuilder>
impl<E, VB, NativeBuilder> !RefUnwindSafe for GenericSdk<E, VB, NativeBuilder>
impl<E, VB, NativeBuilder> !Send for GenericSdk<E, VB, NativeBuilder>
impl<E, VB, NativeBuilder> !Sync for GenericSdk<E, VB, NativeBuilder>
impl<E, VB, NativeBuilder> Unpin for GenericSdk<E, VB, NativeBuilder>
impl<E, VB, NativeBuilder> !UnwindSafe for GenericSdk<E, VB, NativeBuilder>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> Downcast for Twhere
T: Any,
impl<T> Downcast for Twhere
T: Any,
Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
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
.Source§fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any>
Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
.Source§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.Source§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<F, EF, E> ExtensionOperand<F, EF> for E
impl<F, EF, E> ExtensionOperand<F, EF> for E
fn to_operand(self) -> ExtOperand<F, EF>
Source§impl<T> FmtForward for T
impl<T> FmtForward for T
Source§fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
fn fmt_binary(self) -> FmtBinary<Self>where
Self: Binary,
self
to use its Binary
implementation when Debug
-formatted.Source§fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
fn fmt_display(self) -> FmtDisplay<Self>where
Self: Display,
self
to use its Display
implementation when
Debug
-formatted.Source§fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
fn fmt_lower_exp(self) -> FmtLowerExp<Self>where
Self: LowerExp,
self
to use its LowerExp
implementation when
Debug
-formatted.Source§fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
fn fmt_lower_hex(self) -> FmtLowerHex<Self>where
Self: LowerHex,
self
to use its LowerHex
implementation when
Debug
-formatted.Source§fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
fn fmt_octal(self) -> FmtOctal<Self>where
Self: Octal,
self
to use its Octal
implementation when Debug
-formatted.Source§fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
fn fmt_pointer(self) -> FmtPointer<Self>where
Self: Pointer,
self
to use its Pointer
implementation when
Debug
-formatted.Source§fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
fn fmt_upper_exp(self) -> FmtUpperExp<Self>where
Self: UpperExp,
self
to use its UpperExp
implementation when
Debug
-formatted.Source§fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
fn fmt_upper_hex(self) -> FmtUpperHex<Self>where
Self: UpperHex,
self
to use its UpperHex
implementation when
Debug
-formatted.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> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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 moreSource§impl<T> Paint for Twhere
T: ?Sized,
impl<T> Paint for Twhere
T: ?Sized,
Source§fn fg(&self, value: Color) -> Painted<&T>
fn fg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the foreground set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like red()
and
green()
, which have the same functionality but are
pithier.
§Example
Set foreground color to white using fg()
:
use yansi::{Paint, Color};
painted.fg(Color::White);
Set foreground color to white using white()
.
use yansi::Paint;
painted.white();
Source§fn bright_black(&self) -> Painted<&T>
fn bright_black(&self) -> Painted<&T>
Source§fn bright_red(&self) -> Painted<&T>
fn bright_red(&self) -> Painted<&T>
Source§fn bright_green(&self) -> Painted<&T>
fn bright_green(&self) -> Painted<&T>
Source§fn bright_yellow(&self) -> Painted<&T>
fn bright_yellow(&self) -> Painted<&T>
Source§fn bright_blue(&self) -> Painted<&T>
fn bright_blue(&self) -> Painted<&T>
Source§fn bright_magenta(&self) -> Painted<&T>
fn bright_magenta(&self) -> Painted<&T>
Source§fn bright_cyan(&self) -> Painted<&T>
fn bright_cyan(&self) -> Painted<&T>
Source§fn bright_white(&self) -> Painted<&T>
fn bright_white(&self) -> Painted<&T>
Source§fn bg(&self, value: Color) -> Painted<&T>
fn bg(&self, value: Color) -> Painted<&T>
Returns a styled value derived from self
with the background set to
value
.
This method should be used rarely. Instead, prefer to use color-specific
builder methods like on_red()
and
on_green()
, which have the same functionality but
are pithier.
§Example
Set background color to red using fg()
:
use yansi::{Paint, Color};
painted.bg(Color::Red);
Set background color to red using on_red()
.
use yansi::Paint;
painted.on_red();
Source§fn on_primary(&self) -> Painted<&T>
fn on_primary(&self) -> Painted<&T>
Source§fn on_magenta(&self) -> Painted<&T>
fn on_magenta(&self) -> Painted<&T>
Source§fn on_bright_black(&self) -> Painted<&T>
fn on_bright_black(&self) -> Painted<&T>
Source§fn on_bright_red(&self) -> Painted<&T>
fn on_bright_red(&self) -> Painted<&T>
Source§fn on_bright_green(&self) -> Painted<&T>
fn on_bright_green(&self) -> Painted<&T>
Source§fn on_bright_yellow(&self) -> Painted<&T>
fn on_bright_yellow(&self) -> Painted<&T>
Source§fn on_bright_blue(&self) -> Painted<&T>
fn on_bright_blue(&self) -> Painted<&T>
Source§fn on_bright_magenta(&self) -> Painted<&T>
fn on_bright_magenta(&self) -> Painted<&T>
Source§fn on_bright_cyan(&self) -> Painted<&T>
fn on_bright_cyan(&self) -> Painted<&T>
Source§fn on_bright_white(&self) -> Painted<&T>
fn on_bright_white(&self) -> Painted<&T>
Source§fn attr(&self, value: Attribute) -> Painted<&T>
fn attr(&self, value: Attribute) -> Painted<&T>
Enables the styling Attribute
value
.
This method should be used rarely. Instead, prefer to use
attribute-specific builder methods like bold()
and
underline()
, which have the same functionality
but are pithier.
§Example
Make text bold using attr()
:
use yansi::{Paint, Attribute};
painted.attr(Attribute::Bold);
Make text bold using using bold()
.
use yansi::Paint;
painted.bold();
Source§fn rapid_blink(&self) -> Painted<&T>
fn rapid_blink(&self) -> Painted<&T>
Source§fn quirk(&self, value: Quirk) -> Painted<&T>
fn quirk(&self, value: Quirk) -> Painted<&T>
Enables the yansi
Quirk
value
.
This method should be used rarely. Instead, prefer to use quirk-specific
builder methods like mask()
and
wrap()
, which have the same functionality but are
pithier.
§Example
Enable wrapping using .quirk()
:
use yansi::{Paint, Quirk};
painted.quirk(Quirk::Wrap);
Enable wrapping using wrap()
.
use yansi::Paint;
painted.wrap();
Source§fn clear(&self) -> Painted<&T>
👎Deprecated since 1.0.1: renamed to resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.
fn clear(&self) -> Painted<&T>
resetting()
due to conflicts with Vec::clear()
.
The clear()
method will be removed in a future release.Source§fn whenever(&self, value: Condition) -> Painted<&T>
fn whenever(&self, value: Condition) -> Painted<&T>
Conditionally enable styling based on whether the Condition
value
applies. Replaces any previous condition.
See the crate level docs for more details.
§Example
Enable styling painted
only when both stdout
and stderr
are TTYs:
use yansi::{Paint, Condition};
painted.red().on_yellow().whenever(Condition::STDOUTERR_ARE_TTY);
Source§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
Source§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
Source§fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref<'a, R>(&'a self, func: impl FnOnce(&'a Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
fn pipe_ref_mut<'a, R>(&'a mut self, func: impl FnOnce(&'a mut Self) -> R) -> Rwhere
R: 'a,
self
and passes that borrow into the pipe function. Read moreSource§fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
fn pipe_borrow<'a, B, R>(&'a self, func: impl FnOnce(&'a B) -> R) -> R
Source§fn pipe_borrow_mut<'a, B, R>(
&'a mut self,
func: impl FnOnce(&'a mut B) -> R,
) -> R
fn pipe_borrow_mut<'a, B, R>( &'a mut self, func: impl FnOnce(&'a mut B) -> R, ) -> R
Source§fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
fn pipe_as_ref<'a, U, R>(&'a self, func: impl FnOnce(&'a U) -> R) -> R
self
, then passes self.as_ref()
into the pipe function.Source§fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
fn pipe_as_mut<'a, U, R>(&'a mut self, func: impl FnOnce(&'a mut U) -> R) -> R
self
, then passes self.as_mut()
into the pipe
function.Source§fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
fn pipe_deref<'a, T, R>(&'a self, func: impl FnOnce(&'a T) -> R) -> R
self
, then passes self.deref()
into the pipe function.Source§impl<T> Pointable for T
impl<T> Pointable for T
Source§impl<F, Fp, Pt, FC> Selectable<F, Reduced<Pt, Fp>> for FC
impl<F, Fp, Pt, FC> Selectable<F, Reduced<Pt, Fp>> for FC
Source§impl<T> Tap for T
impl<T> Tap for T
Source§fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow<B>(self, func: impl FnOnce(&B)) -> Self
Borrow<B>
of a value. Read moreSource§fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut<B>(self, func: impl FnOnce(&mut B)) -> Self
BorrowMut<B>
of a value. Read moreSource§fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref<R>(self, func: impl FnOnce(&R)) -> Self
AsRef<R>
view of a value. Read moreSource§fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut<R>(self, func: impl FnOnce(&mut R)) -> Self
AsMut<R>
view of a value. Read moreSource§fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref<T>(self, func: impl FnOnce(&T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
fn tap_deref_mut<T>(self, func: impl FnOnce(&mut T)) -> Self
Deref::Target
of a value. Read moreSource§fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
fn tap_dbg(self, func: impl FnOnce(&Self)) -> Self
.tap()
only in debug builds, and is erased in release builds.Source§fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
fn tap_mut_dbg(self, func: impl FnOnce(&mut Self)) -> Self
.tap_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
fn tap_borrow_dbg<B>(self, func: impl FnOnce(&B)) -> Self
.tap_borrow()
only in debug builds, and is erased in release
builds.Source§fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
fn tap_borrow_mut_dbg<B>(self, func: impl FnOnce(&mut B)) -> Self
.tap_borrow_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
fn tap_ref_dbg<R>(self, func: impl FnOnce(&R)) -> Self
.tap_ref()
only in debug builds, and is erased in release
builds.Source§fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
fn tap_ref_mut_dbg<R>(self, func: impl FnOnce(&mut R)) -> Self
.tap_ref_mut()
only in debug builds, and is erased in release
builds.Source§fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
fn tap_deref_dbg<T>(self, func: impl FnOnce(&T)) -> Self
.tap_deref()
only in debug builds, and is erased in release
builds.