Struct pyth_client::PriceConf
source · [−]Expand description
A price with a degree of uncertainty, represented as a price +- a confidence interval.
The confidence interval roughly corresponds to the standard error of a normal distribution.
Both the price and confidence are stored in a fixed-point numeric representation, x * 10^expo,
where expo is the exponent. For example:
use pyth_client::PriceConf;
PriceConf { price: 12345, conf: 267, expo: -2 }; // represents 123.45 +- 2.67
PriceConf { price: 123, conf: 1, expo: 2 }; // represents 12300 +- 100PriceConf supports a limited set of mathematical operations. All of these operations will
propagate any uncertainty in the arguments into the result. However, the uncertainty in the
result may overestimate the true uncertainty (by at most a factor of sqrt(2)) due to
computational limitations. Furthermore, all of these operations may return None if their
result cannot be represented within the numeric representation (e.g., the exponent is so
small that the price does not fit into an i64). Users of these methods should (1) select
their exponents to avoid this problem, and (2) handle the None case gracefully.
Fields
price: i64conf: u64expo: i32Implementations
sourceimpl PriceConf
impl PriceConf
sourcepub fn div(&self, other: &PriceConf) -> Option<PriceConf>
pub fn div(&self, other: &PriceConf) -> Option<PriceConf>
Divide this price by other while propagating the uncertainty in both prices into the result.
This method will automatically select a reasonable exponent for the result. If both
self and other are normalized, the exponent is self.expo + PD_EXPO - other.expo (i.e.,
the fraction has PD_EXPO digits of additional precision). If they are not normalized,
this method will normalize them, resulting in an unpredictable result exponent.
If the result is used in a context that requires a specific exponent, please call
scale_to_exponent on it.
sourcepub fn add(&self, other: &PriceConf) -> Option<PriceConf>
pub fn add(&self, other: &PriceConf) -> Option<PriceConf>
Add other to this, propagating uncertainty in both prices. Requires both
PriceConfs to have the same exponent – use scale_to_exponent on the arguments
if necessary.
TODO: could generalize this method to support different exponents.
sourcepub fn cmul(&self, c: i64, e: i32) -> Option<PriceConf>
pub fn cmul(&self, c: i64, e: i32) -> Option<PriceConf>
Multiply this PriceConf by a constant c * 10^e.
sourcepub fn mul(&self, other: &PriceConf) -> Option<PriceConf>
pub fn mul(&self, other: &PriceConf) -> Option<PriceConf>
Multiply this PriceConf by other, propagating any uncertainty.
sourcepub fn normalize(&self) -> Option<PriceConf>
pub fn normalize(&self) -> Option<PriceConf>
Get a copy of this struct where the price and confidence
have been normalized to be between MIN_PD_V_I64 and MAX_PD_V_I64.
sourcepub fn scale_to_exponent(&self, target_expo: i32) -> Option<PriceConf>
pub fn scale_to_exponent(&self, target_expo: i32) -> Option<PriceConf>
Scale this price/confidence so that its exponent is target_expo. Return None if
this number is outside the range of numbers representable in target_expo, which will
happen if target_expo is too small.
Warning: if target_expo is significantly larger than the current exponent, this function
will return 0 +- 0.
Trait Implementations
sourceimpl BorshDeserialize for PriceConf where
i64: BorshDeserialize,
u64: BorshDeserialize,
i32: BorshDeserialize,
impl BorshDeserialize for PriceConf where
i64: BorshDeserialize,
u64: BorshDeserialize,
i32: BorshDeserialize,
sourceimpl BorshSerialize for PriceConf where
i64: BorshSerialize,
u64: BorshSerialize,
i32: BorshSerialize,
impl BorshSerialize for PriceConf where
i64: BorshSerialize,
u64: BorshSerialize,
i32: BorshSerialize,
sourceimpl<'de> Deserialize<'de> for PriceConf
impl<'de> Deserialize<'de> for PriceConf
sourcefn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error> where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
impl Copy for PriceConf
impl Eq for PriceConf
impl StructuralEq for PriceConf
impl StructuralPartialEq for PriceConf
Auto Trait Implementations
impl RefUnwindSafe for PriceConf
impl Send for PriceConf
impl Sync for PriceConf
impl Unpin for PriceConf
impl UnwindSafe for PriceConf
Blanket Implementations
impl<T> AbiEnumVisitor for T where
T: Serialize + ?Sized,
impl<T> AbiEnumVisitor for T where
T: Serialize + ?Sized,
pub default fn visit_for_abi(
&self,
_digester: &mut AbiDigester
) -> Result<AbiDigester, DigestError>
impl<T> AbiEnumVisitor for T where
T: Serialize + AbiExample + ?Sized,
impl<T> AbiEnumVisitor for T where
T: Serialize + AbiExample + ?Sized,
pub default fn visit_for_abi(
&self,
digester: &mut AbiDigester
) -> Result<AbiDigester, DigestError>
impl<T> AbiExample for T
impl<T> AbiExample for T
pub default fn example() -> T
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcepub fn borrow_mut(&mut self) -> &mut T
pub fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcepub fn to_owned(&self) -> T
pub fn to_owned(&self) -> T
Creates owned data from borrowed data, usually by cloning. Read more
sourcepub fn clone_into(&self, target: &mut T)
pub fn clone_into(&self, target: &mut T)
toowned_clone_into)Uses borrowed data to replace owned data, usually by cloning. Read more