pub struct SubaccountPolicySpec {Show 23 fields
pub name: String,
pub description: String,
pub spot_markets: Vec<SpotMarketRule>,
pub perp_markets: Vec<PerpMarketRule>,
pub spot_market_scope: EnumValue<Value>,
pub perp_market_scope: EnumValue<Value>,
pub actions: Vec<EnumValue<PolicyAction>>,
pub global_notional_cap: u64,
pub max_order_notional: u64,
pub max_open_orders: u32,
pub max_open_positions: u32,
pub global_perp_leverage_x: u32,
pub daily_internal_transfer_out_limit: u64,
pub daily_withdraw_limit: u64,
pub internal_transfers_own_only: bool,
pub enforce_withdraw_whitelist: bool,
pub trading_halted: bool,
pub liquidation_only: bool,
pub daily_loss_limit: u64,
pub intraday_drawdown_limit_bps: u32,
pub locked: bool,
pub review_at: MessageField<Timestamp>,
pub expires_at: MessageField<Timestamp>,
/* private fields */
}Expand description
SubaccountPolicySpec contains the mutable configuration of a sub-account policy.
Fields§
§name: StringHuman-readable policy name. Create requires a non-empty value; update validates it after merging fields selected by update_mask.
Field 1: name
description: StringOptional policy description for dashboards and audits. Maximum 256 characters.
Field 2: description
spot_markets: Vec<SpotMarketRule>Allowed spot markets for this policy.
Field 3: spot_markets
perp_markets: Vec<PerpMarketRule>Allowed perp markets and optional per-contract leverage caps.
Field 4: perp_markets
spot_market_scope: EnumValue<Value>Market-level scope for spot markets. When unspecified, defaults to ALL.
Field 5: spot_market_scope
perp_market_scope: EnumValue<Value>Market-level scope for perp contracts. When unspecified, defaults to ALL.
Field 6: perp_market_scope
actions: Vec<EnumValue<PolicyAction>>High-level actions enabled for the sub-account policy. Up to 64 unique explicit actions are allowed.
Field 7: actions
global_notional_cap: u64Maximum total notional exposure across all positions for this sub-account, expressed in the canonical quote unit (for example, micro-USDT). A value of 0 means no explicit cap.
Field 12: global_notional_cap
max_order_notional: u64Maximum notional size for any single order on this sub-account, expressed in the canonical quote unit (for example, micro-USDT). A value of 0 means no explicit cap.
Field 13: max_order_notional
max_open_orders: u32Maximum number of resting orders allowed on this sub-account at any time. A value of 0 means no explicit cap.
Field 14: max_open_orders
max_open_positions: u32Maximum number of open perp positions allowed on this sub-account. A value of 0 means no explicit cap.
Field 15: max_open_positions
global_perp_leverage_x: u32Optional global leverage cap across all perp contracts. Supported non-zero values are 1, 3, 5, 10, 20, 50, and 100. A value of 0 means no explicit cap.
Field 16: global_perp_leverage_x
daily_internal_transfer_out_limit: u64Maximum total notional this sub-account can transfer out internally per rolling day, expressed in the canonical quote unit (for example, micro-USDT). A value of 0 means no explicit cap.
Field 17: daily_internal_transfer_out_limit
daily_withdraw_limit: u64Maximum total notional this sub-account can withdraw per rolling day, expressed in the canonical quote unit (for example, micro-USDT). A value of 0 means no explicit cap.
Field 18: daily_withdraw_limit
internal_transfers_own_only: boolWhen true, internal transfers from this sub-account may only target other sub-accounts owned by the same root account.
Field 19: internal_transfers_own_only
enforce_withdraw_whitelist: boolWhen true, external withdrawals from this sub-account must target an approved withdrawal destination.
Field 20: enforce_withdraw_whitelist
trading_halted: boolWhen true, new orders for this sub-account are rejected regardless of other policy settings.
Field 21: trading_halted
liquidation_only: boolWhen true, this sub-account may only reduce or close existing exposure.
Field 22: liquidation_only
daily_loss_limit: u64Maximum realized loss over a rolling day before safety controls may halt activity, expressed in the canonical quote unit (for example, micro-USDT). A value of 0 means no explicit limit.
Field 23: daily_loss_limit
intraday_drawdown_limit_bps: u32Maximum drawdown from peak equity in basis points. One basis point is 1/100 of one percent. A value of 0 means no explicit limit.
Field 24: intraday_drawdown_limit_bps
locked: boolWhen true, the policy is write-protected and requires an elevated mutation path.
Field 25: locked
review_at: MessageField<Timestamp>Optional review time in UTC. This does not automatically disable the policy.
Field 26: review_at
expires_at: MessageField<Timestamp>Optional expiry time in UTC. This does not automatically disable the policy.
Field 27: expires_at
Implementations§
Trait Implementations§
Source§impl Clone for SubaccountPolicySpec
impl Clone for SubaccountPolicySpec
Source§fn clone(&self) -> SubaccountPolicySpec
fn clone(&self) -> SubaccountPolicySpec
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl Debug for SubaccountPolicySpec
impl Debug for SubaccountPolicySpec
Source§impl Default for SubaccountPolicySpec
impl Default for SubaccountPolicySpec
Source§fn default() -> SubaccountPolicySpec
fn default() -> SubaccountPolicySpec
Source§impl DefaultInstance for SubaccountPolicySpec
impl DefaultInstance for SubaccountPolicySpec
Source§fn default_instance() -> &'static Self
fn default_instance() -> &'static Self
Source§impl<'de> Deserialize<'de> for SubaccountPolicySpecwhere
SubaccountPolicySpec: Default,
impl<'de> Deserialize<'de> for SubaccountPolicySpecwhere
SubaccountPolicySpec: Default,
Source§fn 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>,
Source§impl ExtensionSet for SubaccountPolicySpec
impl ExtensionSet for SubaccountPolicySpec
Source§const PROTO_FQN: &'static str = "auth.v1.SubaccountPolicySpec"
const PROTO_FQN: &'static str = "auth.v1.SubaccountPolicySpec"
"google.protobuf.FieldOptions". Read moreSource§fn unknown_fields(&self) -> &UnknownFields
fn unknown_fields(&self) -> &UnknownFields
Source§fn unknown_fields_mut(&mut self) -> &mut UnknownFields
fn unknown_fields_mut(&mut self) -> &mut UnknownFields
Source§fn extension<C>(&self, ext: &Extension<C>) -> <C as ExtensionCodec>::Outputwhere
C: ExtensionCodec,
fn extension<C>(&self, ext: &Extension<C>) -> <C as ExtensionCodec>::Outputwhere
C: ExtensionCodec,
Source§fn set_extension<C>(
&mut self,
ext: &Extension<C>,
value: <C as ExtensionCodec>::Value,
)where
C: ExtensionCodec,
fn set_extension<C>(
&mut self,
ext: &Extension<C>,
value: <C as ExtensionCodec>::Value,
)where
C: ExtensionCodec,
Source§fn has_extension<C>(&self, ext: &Extension<C>) -> boolwhere
C: ExtensionCodec,
fn has_extension<C>(&self, ext: &Extension<C>) -> boolwhere
C: ExtensionCodec,
true if any record at the extension’s field number is present. Read moreSource§fn clear_extension<C>(&mut self, ext: &Extension<C>)where
C: ExtensionCodec,
fn clear_extension<C>(&mut self, ext: &Extension<C>)where
C: ExtensionCodec,
Source§fn extension_or_default<C>(
&self,
ext: &Extension<C>,
) -> <C as ExtensionCodec>::Valuewhere
C: ExtensionCodec<Output = Option<<C as ExtensionCodec>::Value>>,
<C as ExtensionCodec>::Value: Default,
fn extension_or_default<C>(
&self,
ext: &Extension<C>,
) -> <C as ExtensionCodec>::Valuewhere
C: ExtensionCodec<Output = Option<<C as ExtensionCodec>::Value>>,
<C as ExtensionCodec>::Value: Default,
[default = ...]
value if absent, or the type’s Default if no proto default was declared. Read moreSource§impl HasMessageView for SubaccountPolicySpec
impl HasMessageView for SubaccountPolicySpec
Source§type View<'a> = SubaccountPolicySpecView<'a>
type View<'a> = SubaccountPolicySpecView<'a>
Self, borrowing from a buffer with lifetime
'a.Source§type ViewHandle = SubaccountPolicySpecOwnedView
type ViewHandle = SubaccountPolicySpecOwnedView
'static owned-view handle for Self
(FooOwnedView).Source§fn decode_view(buf: &[u8]) -> Result<Self::View<'_>, DecodeError>
fn decode_view(buf: &[u8]) -> Result<Self::View<'_>, DecodeError>
Source§fn decode_view_with_options<'a>(
buf: &'a [u8],
opts: &DecodeOptions,
) -> Result<Self::View<'a>, DecodeError>
fn decode_view_with_options<'a>( buf: &'a [u8], opts: &DecodeOptions, ) -> Result<Self::View<'a>, DecodeError>
View under custom
DecodeOptions (recursion limit, max message
size, unknown-field limit). Read moreSource§fn decode_view_handle(bytes: Bytes) -> Result<Self::ViewHandle, DecodeError>
fn decode_view_handle(bytes: Bytes) -> Result<Self::ViewHandle, DecodeError>
Source§fn decode_view_handle_with_options(
bytes: Bytes,
opts: &DecodeOptions,
) -> Result<Self::ViewHandle, DecodeError>
fn decode_view_handle_with_options( bytes: Bytes, opts: &DecodeOptions, ) -> Result<Self::ViewHandle, DecodeError>
Source§impl Message for SubaccountPolicySpec
impl Message for SubaccountPolicySpec
Source§fn compute_size(&self, __cache: &mut SizeCache) -> u32
fn compute_size(&self, __cache: &mut SizeCache) -> u32
Returns the total encoded size in bytes.
The result is a u32; the protobuf specification requires all
messages to fit within 2 GiB (2,147,483,647 bytes), so a
compliant message will never overflow this type.
Source§fn write_to(&self, __cache: &mut SizeCache, buf: &mut impl BufMut)
fn write_to(&self, __cache: &mut SizeCache, buf: &mut impl BufMut)
cache (populated by a prior
compute_size call on the same cache). Read moreSource§fn merge_field(
&mut self,
tag: Tag,
buf: &mut impl Buf,
ctx: DecodeContext<'_>,
) -> Result<(), DecodeError>
fn merge_field( &mut self, tag: Tag, buf: &mut impl Buf, ctx: DecodeContext<'_>, ) -> Result<(), DecodeError>
buf. Read moreSource§fn encode(&self, buf: &mut impl BufMut)
fn encode(&self, buf: &mut impl BufMut)
Source§fn encode_with_cache(&self, cache: &mut SizeCache, buf: &mut impl BufMut)
fn encode_with_cache(&self, cache: &mut SizeCache, buf: &mut impl BufMut)
SizeCache, for
reuse across many encodes in a hot loop. Clears the cache first.Source§fn encoded_len(&self) -> u32
fn encoded_len(&self) -> u32
Source§fn encode_length_delimited(&self, buf: &mut impl BufMut)
fn encode_length_delimited(&self, buf: &mut impl BufMut)
Source§fn encode_to_bytes(&self) -> Bytes
fn encode_to_bytes(&self) -> Bytes
bytes::Bytes. Read moreSource§fn decode(buf: &mut impl Buf) -> Result<Self, DecodeError>where
Self: Sized,
fn decode(buf: &mut impl Buf) -> Result<Self, DecodeError>where
Self: Sized,
Source§fn decode_from_slice(data: &[u8]) -> Result<Self, DecodeError>where
Self: Sized,
fn decode_from_slice(data: &[u8]) -> Result<Self, DecodeError>where
Self: Sized,
Source§fn decode_length_delimited(buf: &mut impl Buf) -> Result<Self, DecodeError>where
Self: Sized,
fn decode_length_delimited(buf: &mut impl Buf) -> Result<Self, DecodeError>where
Self: Sized,
Source§fn merge_to_limit(
&mut self,
buf: &mut impl Buf,
ctx: DecodeContext<'_>,
limit: usize,
) -> Result<(), DecodeError>
fn merge_to_limit( &mut self, buf: &mut impl Buf, ctx: DecodeContext<'_>, limit: usize, ) -> Result<(), DecodeError>
Source§fn merge_group(
&mut self,
buf: &mut impl Buf,
ctx: DecodeContext<'_>,
field_number: u32,
) -> Result<(), DecodeError>
fn merge_group( &mut self, buf: &mut impl Buf, ctx: DecodeContext<'_>, field_number: u32, ) -> Result<(), DecodeError>
buf, reading fields until an
EndGroup tag with the given field_number is encountered. Read moreSource§fn merge(
&mut self,
buf: &mut impl Buf,
ctx: DecodeContext<'_>,
) -> Result<(), DecodeError>
fn merge( &mut self, buf: &mut impl Buf, ctx: DecodeContext<'_>, ) -> Result<(), DecodeError>
Source§fn merge_from_slice(&mut self, data: &[u8]) -> Result<(), DecodeError>
fn merge_from_slice(&mut self, data: &[u8]) -> Result<(), DecodeError>
Source§fn merge_length_delimited(
&mut self,
buf: &mut impl Buf,
ctx: DecodeContext<'_>,
) -> Result<(), DecodeError>
fn merge_length_delimited( &mut self, buf: &mut impl Buf, ctx: DecodeContext<'_>, ) -> Result<(), DecodeError>
Source§impl MessageName for SubaccountPolicySpec
impl MessageName for SubaccountPolicySpec
Source§const PACKAGE: &'static str = "auth.v1"
const PACKAGE: &'static str = "auth.v1"
Source§const NAME: &'static str = "SubaccountPolicySpec"
const NAME: &'static str = "SubaccountPolicySpec"
. between nesting levels. Read moreSource§impl PartialEq for SubaccountPolicySpec
impl PartialEq for SubaccountPolicySpec
Source§impl ProtoElemJson for SubaccountPolicySpec
impl ProtoElemJson for SubaccountPolicySpec
Source§fn serialize_proto_json<S: Serializer>(
v: &Self,
s: S,
) -> Result<S::Ok, S::Error>
fn serialize_proto_json<S: Serializer>( v: &Self, s: S, ) -> Result<S::Ok, S::Error>
Source§fn deserialize_proto_json<'de, D: Deserializer<'de>>(
d: D,
) -> Result<Self, D::Error>
fn deserialize_proto_json<'de, D: Deserializer<'de>>( d: D, ) -> Result<Self, D::Error>
Source§impl Serialize for SubaccountPolicySpec
impl Serialize for SubaccountPolicySpec
impl StructuralPartialEq for SubaccountPolicySpec
Auto Trait Implementations§
impl Freeze for SubaccountPolicySpec
impl RefUnwindSafe for SubaccountPolicySpec
impl Send for SubaccountPolicySpec
impl Sync for SubaccountPolicySpec
impl Unpin for SubaccountPolicySpec
impl UnsafeUnpin for SubaccountPolicySpec
impl UnwindSafe for SubaccountPolicySpec
Blanket Implementations§
Source§impl<T> AnyMessage for Twhere
T: Message + JsonSerialize + 'static,
impl<T> AnyMessage for Twhere
T: Message + JsonSerialize + 'static,
Source§fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
dyn Any for downcasting.Source§fn into_any(self: Box<T>) -> Box<dyn Any>
fn into_any(self: Box<T>) -> Box<dyn Any>
Box<dyn Any> for owned downcasting. Read moreSource§fn encode(&self, format: CodecFormat) -> Result<Bytes, ConnectError>
fn encode(&self, format: CodecFormat) -> Result<Bytes, ConnectError>
Source§fn type_name(&self) -> &'static str
fn type_name(&self) -> &'static str
std::any::type_name.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
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
Source§impl<M> Encodable<M> for Mwhere
M: Message + JsonSerialize,
impl<M> Encodable<M> for Mwhere
M: Message + JsonSerialize,
Source§fn encode(&self, codec: CodecFormat) -> Result<Bytes, ConnectError>
fn encode(&self, codec: CodecFormat) -> Result<Bytes, ConnectError>
self as wire bytes for M in the requested format.