Struct SubmitOrderRequestBuilder
pub struct SubmitOrderRequestBuilder { /* private fields */ }Expand description
Builder for constructing SubmitOrderRequest with a fluent API.
This builder provides a type-safe way to construct order submission requests with proper validation of required fields and configuration constraints. It supports:
- Market and limit orders
- Various time-in-force options (GTC, GTT, IOC, FOK)
- Post-only and reduce-only flags
- Conditional orders (stop-loss, take-profit, trailing stops)
- Optional client order IDs for tracking
§Required Fields
The following fields must be set before calling build():
- Market: Trading pair identifier
- Account: Account address
- Side: Buy or Sell
- Time in force: GTC, GTT, IOC, or FOK
- Order type: Market or Limit
- Quantity: Order size
§Examples
Basic limit order:
use types::api::submit_order::SubmitOrderRequestBuilder;
let order = SubmitOrderRequestBuilder::new()
.market("0x123")
.account("0x123")
.buy()
.good_till_cancel()
.limit_order("50000.00")
.quantity("1.5")
.build()
.unwrap();Market order with IOC:
use types::api::submit_order::SubmitOrderRequestBuilder;
let order = SubmitOrderRequestBuilder::new()
.market("0x456")
.account("0x456")
.sell()
.immediate_or_cancel()
.market_order()
.quantity("10.0")
.build()
.unwrap();Post-only limit order with expiry:
use types::api::submit_order::SubmitOrderRequestBuilder;
let order = SubmitOrderRequestBuilder::new()
.market("0x789")
.account("0x789")
.buy()
.good_till_time(1747313713)
.limit_order("48000.00")
.quantity("0.5")
.post_only(true)
.client_order_id("order-123")
.build()
.unwrap();Conditional stop-loss order (a market order must be IOC or FOK, and a conditional order carries its size in the conditional):
use types::api::submit_order::{SubmitOrderRequestBuilder, Conditional, Trigger};
let stop_loss = Conditional::builder()
.falls_below()
.trigger(Trigger::price("45000.00"))
.last_trade_price()
.absolute_quantity("1.0")
.build()
.unwrap();
let order = SubmitOrderRequestBuilder::new()
.market("0xabc")
.account("0xabc")
.sell()
.immediate_or_cancel()
.market_order()
.conditional(stop_loss)
.build()
.unwrap();Implementations§
§impl SubmitOrderRequestBuilder
impl SubmitOrderRequestBuilder
pub fn new() -> SubmitOrderRequestBuilder
pub fn new() -> SubmitOrderRequestBuilder
Creates a new SubmitOrderRequestBuilder with all fields unset.
§Example
use types::api::submit_order::SubmitOrderRequestBuilder;
let builder = SubmitOrderRequestBuilder::new();pub fn market<S>(self, market: S) -> SubmitOrderRequestBuilder
pub fn market<S>(self, market: S) -> SubmitOrderRequestBuilder
Sets the market (trading pair).
Required field - Must be set before calling build().
§Arguments
market- the market’s on-chain object id,0x-prefixed hex. A symbol such as"BTC-USD"makesbuild()returnInvalidFieldValue.
§Example
use types::api::submit_order::SubmitOrderRequestBuilder;
let builder = SubmitOrderRequestBuilder::new()
.market("0x5efc5ad00c209baf4c5d77dfd1be18e8b50916e53adbe2142ae1b47af445303c");pub fn account<S>(self, account: S) -> SubmitOrderRequestBuilder
pub fn account<S>(self, account: S) -> SubmitOrderRequestBuilder
pub fn side(self, side: Side) -> SubmitOrderRequestBuilder
pub fn side(self, side: Side) -> SubmitOrderRequestBuilder
pub fn buy(self) -> SubmitOrderRequestBuilder
pub fn buy(self) -> SubmitOrderRequestBuilder
pub fn sell(self) -> SubmitOrderRequestBuilder
pub fn sell(self) -> SubmitOrderRequestBuilder
pub fn time_in_force(self, tif: TimeInForce) -> SubmitOrderRequestBuilder
pub fn time_in_force(self, tif: TimeInForce) -> SubmitOrderRequestBuilder
Sets the time-in-force directly.
Required field - Must be set before calling build().
Tip: Consider using convenience methods like good_till_cancel(),
immediate_or_cancel(), etc.
pub fn good_till_time(self, expiry_timestamp: u128) -> SubmitOrderRequestBuilder
pub fn good_till_time(self, expiry_timestamp: u128) -> SubmitOrderRequestBuilder
Sets time-in-force to Good Till Time (GTT) with expiry timestamp.
The order will remain active until the specified timestamp or until filled/canceled.
Required field - Must be set before calling build().
§Arguments
expiry_timestamp- Unix timestamp in milliseconds when the order expires; must be in the future and no later thanMAX_EXPIRY_TIMESTAMP_MS
§Example
use types::api::submit_order::SubmitOrderRequestBuilder;
let builder = SubmitOrderRequestBuilder::new()
.good_till_time(1747313713);pub fn good_till_cancel(self) -> SubmitOrderRequestBuilder
pub fn good_till_cancel(self) -> SubmitOrderRequestBuilder
pub fn immediate_or_cancel(self) -> SubmitOrderRequestBuilder
pub fn immediate_or_cancel(self) -> SubmitOrderRequestBuilder
Sets time-in-force to Immediate or Cancel (IOC).
The order executes immediately for any available quantity, canceling the remainder.
Required field - Must be set before calling build().
§Example
use types::api::submit_order::SubmitOrderRequestBuilder;
let builder = SubmitOrderRequestBuilder::new()
.immediate_or_cancel();pub fn fill_or_kill(self) -> SubmitOrderRequestBuilder
pub fn fill_or_kill(self) -> SubmitOrderRequestBuilder
Sets time-in-force to Fill or Kill (FOK).
The order must be filled completely and immediately, or it’s canceled entirely.
Required field - Must be set before calling build().
§Example
use types::api::submit_order::SubmitOrderRequestBuilder;
let builder = SubmitOrderRequestBuilder::new()
.fill_or_kill();pub fn expiry_timestamp(self, timestamp: u128) -> SubmitOrderRequestBuilder
pub fn expiry_timestamp(self, timestamp: u128) -> SubmitOrderRequestBuilder
Sets the expiry timestamp for GTT orders.
Note: This is typically set via good_till_time().
§Arguments
timestamp- Unix timestamp in milliseconds when the order expires
pub fn reduce_only(self, reduce_only: bool) -> SubmitOrderRequestBuilder
pub fn reduce_only(self, reduce_only: bool) -> SubmitOrderRequestBuilder
Sets the reduce-only flag.
When true, the order can only reduce an existing position, not increase it.
Useful for closing positions without risk of opening new ones.
§Arguments
reduce_only- Whether this order can only reduce positions
§Example
use types::api::submit_order::SubmitOrderRequestBuilder;
let builder = SubmitOrderRequestBuilder::new()
.reduce_only(true);pub fn post_only(self, post_only: bool) -> SubmitOrderRequestBuilder
pub fn post_only(self, post_only: bool) -> SubmitOrderRequestBuilder
Sets the post-only flag.
When true, the order will only be placed if it doesn’t immediately match
(i.e., it becomes a maker order). Prevents the order from taking liquidity.
§Arguments
post_only- Whether this order must be a maker order
§Example
use types::api::submit_order::SubmitOrderRequestBuilder;
let builder = SubmitOrderRequestBuilder::new()
.post_only(true);pub fn order_type(self, order_type: OrderType) -> SubmitOrderRequestBuilder
pub fn order_type(self, order_type: OrderType) -> SubmitOrderRequestBuilder
Sets the order type directly.
Required field - Must be set before calling build().
Tip: Consider using limit_order() or
market_order() for better readability.
pub fn limit_order<S>(self, price: S) -> SubmitOrderRequestBuilder
pub fn limit_order<S>(self, price: S) -> SubmitOrderRequestBuilder
Sets order as a limit order with the specified price.
Limit orders execute at the specified price or better.
Required field - Must be set before calling build().
§Arguments
price- Limit price as a decimal string (e.g., “50000.00”)
§Example
use types::api::submit_order::SubmitOrderRequestBuilder;
let builder = SubmitOrderRequestBuilder::new()
.limit_order("50000.00");pub fn market_order(self) -> SubmitOrderRequestBuilder
pub fn market_order(self) -> SubmitOrderRequestBuilder
pub fn limit_price<S>(self, price: S) -> SubmitOrderRequestBuilder
pub fn limit_price<S>(self, price: S) -> SubmitOrderRequestBuilder
Sets the limit price for limit orders.
Note: This is typically set via limit_order().
§Arguments
price- Limit price as a decimal string (e.g., “50000.00”)
pub fn quantity<S>(self, quantity: S) -> SubmitOrderRequestBuilder
pub fn quantity<S>(self, quantity: S) -> SubmitOrderRequestBuilder
pub fn client_order_id<S>(self, id: S) -> SubmitOrderRequestBuilder
pub fn client_order_id<S>(self, id: S) -> SubmitOrderRequestBuilder
Sets a client-assigned order ID for tracking.
Useful for correlating orders with your internal systems and for order linking in bracket orders.
§Arguments
id- Client order ID (e.g., “order-123”)
§Example
use types::api::submit_order::SubmitOrderRequestBuilder;
let builder = SubmitOrderRequestBuilder::new()
.client_order_id("order-123");pub fn conditional(self, conditional: Conditional) -> SubmitOrderRequestBuilder
pub fn conditional(self, conditional: Conditional) -> SubmitOrderRequestBuilder
Sets conditional order parameters (stop-loss, take-profit, trailing stops).
Allows creating orders that only activate when certain price conditions are met.
§Arguments
conditional- Conditional configuration built withConditional::builder()
§Example
use types::api::submit_order::{SubmitOrderRequestBuilder, Conditional, Trigger};
let stop_loss = Conditional::builder()
.falls_below()
.trigger(Trigger::price("45000.00"))
.last_trade_price()
.build()
.unwrap();
let builder = SubmitOrderRequestBuilder::new()
.conditional(stop_loss);pub fn build(self) -> Result<SubmitOrderRequest, SubmitOrderRequestBuilderError>
pub fn build(self) -> Result<SubmitOrderRequest, SubmitOrderRequestBuilderError>
Builds the SubmitOrderRequest, consuming the builder.
§Returns
Ok(SubmitOrderRequest)- Successfully built order requestErr(SubmitOrderRequestBuilderError)- Missing required fields or invalid configuration
§Errors
Returns an error if:
- Any required field is missing (market, account, side, time_in_force, order_type, quantity)
- Limit orders are missing a price
- Market orders have a price specified
- GTT orders are missing an expiry timestamp
- Order type is Unspecified
§Example
use types::api::submit_order::SubmitOrderRequestBuilder;
let order = SubmitOrderRequestBuilder::new()
.market("0x123")
.account("0x123")
.buy()
.good_till_cancel()
.limit_order("50000.00")
.quantity("1.5")
.build()
.expect("Failed to build order");Trait Implementations§
§impl Debug for SubmitOrderRequestBuilder
impl Debug for SubmitOrderRequestBuilder
§impl Default for SubmitOrderRequestBuilder
impl Default for SubmitOrderRequestBuilder
§fn default() -> SubmitOrderRequestBuilder
fn default() -> SubmitOrderRequestBuilder
Auto Trait Implementations§
impl Freeze for SubmitOrderRequestBuilder
impl RefUnwindSafe for SubmitOrderRequestBuilder
impl Send for SubmitOrderRequestBuilder
impl Sync for SubmitOrderRequestBuilder
impl Unpin for SubmitOrderRequestBuilder
impl UnsafeUnpin for SubmitOrderRequestBuilder
impl UnwindSafe for SubmitOrderRequestBuilder
Blanket Implementations§
§impl<U> As for U
impl<U> As for U
§fn as_<T>(self) -> Twhere
T: CastFrom<U>,
U: Sized,
fn as_<T>(self) -> Twhere
T: CastFrom<U>,
U: Sized,
self to type T. The semantics of numeric casting with the as operator are followed, so <T as As>::as_::<U> can be used in the same way as T as U for numeric conversions. Read more§impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedExplicit<'a, E> for Twhere
T: 'a,
§impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
impl<'a, T, E> AsTaggedImplicit<'a, E> for Twhere
T: 'a,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
§impl<T> Conv for T
impl<T> Conv for T
§impl<T> InitializableFromZeroed for Twhere
T: Default,
impl<T> InitializableFromZeroed for Twhere
T: Default,
§unsafe fn initialize(place: *mut T)
unsafe fn initialize(place: *mut T)
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> 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 more§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a tonic::Request§impl<T> IntoRequest<T> for T
impl<T> IntoRequest<T> for T
§fn into_request(self) -> Request<T>
fn into_request(self) -> Request<T>
T in a Request§impl<L> LayerExt<L> for L
impl<L> LayerExt<L> for L
§fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
fn named_layer<S>(&self, service: S) -> Layered<<L as Layer<S>>::Service, S>where
L: Layer<S>,
Layered].impl<T> MaybeSend for Twhere
T: Send,
§impl<T> Pipe for Twhere
T: ?Sized,
impl<T> Pipe for Twhere
T: ?Sized,
§fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
fn pipe<R>(self, func: impl FnOnce(Self) -> R) -> Rwhere
Self: Sized,
§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 more§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 more§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
§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
§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.§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.§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.impl<T> Read<Exclusive, BecauseExclusive> for Twhere
T: ?Sized,
§impl<T> Tap for T
impl<T> Tap for T
§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 more§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 more§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 more§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 more§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 more§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 more§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.§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.§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.§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.§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.§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.§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.