pub trait FillRoute: StateWrite + Sized {
// Provided method
fn fill_route<'life0, 'life1, 'async_trait>(
&'life0 mut self,
input: Value,
hops: &'life1 [Id],
spill_price: Option<U128x128>,
) -> Pin<Box<dyn Future<Output = Result<SwapExecution, FillError>> + Send + 'async_trait>>
where Self: Send + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait { ... }
}component only.Provided Methods§
Sourcefn fill_route<'life0, 'life1, 'async_trait>(
&'life0 mut self,
input: Value,
hops: &'life1 [Id],
spill_price: Option<U128x128>,
) -> Pin<Box<dyn Future<Output = Result<SwapExecution, FillError>> + Send + 'async_trait>>where
Self: Send + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn fill_route<'life0, 'life1, 'async_trait>(
&'life0 mut self,
input: Value,
hops: &'life1 [Id],
spill_price: Option<U128x128>,
) -> Pin<Box<dyn Future<Output = Result<SwapExecution, FillError>> + Send + 'async_trait>>where
Self: Send + 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Fills a trade of a given input amount along a given route of hops,
optionally using spill_price to put limits on execution.
Note: this method will always execute at least one sub-trade along the route, even if it would exceed the spill price (i.e., the spill price is only used after consuming at least one position along the route). This covers an edge case in routing, which computes approximate spill prices: if there were two routes with very similar prices, and both of their estimated prices were underestimates, the routing could potentially switch back and forth between them without making progress. Ensuring we always consume at least one position prevents this possibility.
§Invariants
It is an error to call fill_route on a route that does not have at least one position for each hop.
§Errors
fill_route can fail for a number of reasons captured by the FillError enum.
§Panics
At the moment, fill_route will panic on I/O failures (e.g., if the state is corrupted, or storage fails).
Dyn Compatibility§
This trait is not dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety", so this trait is not object safe.