Struct Invoice

Source
pub struct Invoice { /* private fields */ }
Expand description

Representation of an invoice. Invoices are created by the PaymentGateway.

Invoices have an expiration block, after which they are considered expired. However, note that the payment gateway by default will continue updating invoices even after expiration.

To receive updates for a given Invoice, use a Subscriber.

Implementations§

Source§

impl Invoice

Source

pub fn uri(&self) -> String

Returns a URI containing the address and amount due as a String. For example:

"monero:4A1WSBQdCbUCqt3DaGfmqVFchXScF43M6c5r4B6JXT3dUwuALncU9XTEnRPmUMcB3c16kVP9Y7thFLCJ5BaMW3UmSy93w3w?tx_amount=0.001"

Monero URIs can be thought of as fancy addresses that pre-fill the amount field for the user (and sometimes the description field as well). They are supported by all major wallets.

Source

pub fn is_confirmed(&self) -> bool

Returns true if the Invoice has received the required number of confirmations.

Source

pub fn is_paid(&self) -> bool

Returns true if the Invoice has been paid in full (regadless of whether all required confirmations have been received).

Source

pub fn is_expired(&self) -> bool

Returns true if the Invoice’s current block is greater than or equal to its expiration block.

Source

pub fn address(&self) -> &str

Returns the base 58 encoded subaddress of this Invoice.

Source

pub fn id(&self) -> InvoiceId

Returns the ID of this invoice.

Source

pub fn index(&self) -> SubIndex

Returns the subaddress index of this Invoice.

Source

pub fn creation_height(&self) -> u64

Returns the blockchain height at which the Invoice was created.

Source

pub fn amount_requested(&self) -> u64

Returns the amount of monero requested in piconeros.

Source

pub fn amount_paid(&self) -> u64

Returns the amount of monero paid in piconeros.

Source

pub fn xmr_requested(&self) -> f64

Returns the amount of monero requested in XMR.

Note that rounding may occur because the precision of f64 is insufficient for representing large amounts of XMR out to many decimal places. If accuracy is desired, amount_requested() should be preferred.

§Examples
// Create a new `Invoice` for 1 millinero.
let invoice_id = payment_gateway.new_invoice(1_000_000_000, 3, 5, "for pizza".to_string()).await?;
let small_invoice = payment_gateway.get_invoice(invoice_id).await?.expect("invoice ID not found");

// One millinero, as expected.
assert_eq!(small_invoice.xmr_requested(), 0.001);

// Create a new `Invoice` for 18446744.073709551615 XMR.
let invoice_id = payment_gateway.new_invoice(18_446_744_073_709_551_615, 3, 5, "for lambo".to_string()).await?;
let large_invoice = payment_gateway.get_invoice(invoice_id).await?.expect("invoice ID not found");

// The large value has been rounded slightly due to f64 precision limitations.
assert_eq!(large_invoice.xmr_requested(), 18446744.07370955);
Source

pub fn xmr_paid(&self) -> f64

Returns the amount of monero paid in XMR.

Note that rounding may occur because the precision of f64 is insufficient for representing large amounts of XMR out to many decimal places. If accuracy is desired, amount_paid() should be preferred.

For an example of possible rounding error, see xmr_requested()

Source

pub fn confirmations_required(&self) -> u64

Returns the number of confirmations this Invoice requires before it is considered fully confirmed.

Source

pub fn confirmations(&self) -> Option<u64>

Returns the number of confirmations this Invoice has received since it was paid in full. Returns None if the Invoice has not yet been paid in full.

Source

pub fn current_height(&self) -> u64

Returns the last daemon height at which this Invoice was updated.

Returns 0 if the Invoice has not yet been updated.

Source

pub fn expiration_height(&self) -> u64

Returns the daemon height at which this Invoice will expire.

Source

pub fn expiration_in(&self) -> u64

Returns the number of blocks before expiration.

§Examples
// Create a new `Invoice` requiring 3 confirmations, and expiring in 5 blocks.
let invoice_id = payment_gateway.new_invoice(10000, 3, 5, "for pizza".to_string()).await?;
let mut subscriber = payment_gateway.subscribe(invoice_id).expect("invoice ID not found");
let invoice = subscriber.recv().await.expect("invoice update not received");

assert_eq!(invoice.expiration_in(), 5);
Source

pub fn description(&self) -> &str

Returns the description of this invoice.

Trait Implementations§

Source§

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

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 Invoice

Source§

fn clone(&self) -> Invoice

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 Invoice

Source§

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

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

impl<__Context> Decode<__Context> for Invoice

Source§

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

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

impl<'de> Deserialize<'de> for Invoice

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 Invoice

Source§

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

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

impl Encode for Invoice

Source§

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

Encode a given type.
Source§

impl PartialEq for Invoice

This custom PartialEq implementation is necessary so that the order of Transfers can be ignored while comparing Invoices.

Source§

fn eq(&self, other: &Self) -> 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 Serialize for Invoice

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 Eq for Invoice

Auto Trait Implementations§

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> 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

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> 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> Same for T

Source§

type Output = T

Should always be Self
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, 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<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,