Skip to main content

bulk_client/msgs/
subaccounts.rs

1use std::sync::Arc;
2use serde::{Deserialize, Serialize};
3use solana_keypair::Pubkey;
4use crate::transaction::ActionMeta;
5
6
7// ─────────────────────────────────────────────────────────────────────────────
8// Type of transfer
9// ─────────────────────────────────────────────────────────────────────────────
10
11#[derive(Clone, Copy, Debug, PartialEq, Eq, Serialize, Deserialize)]
12#[serde(rename_all = "camelCase")]
13pub enum TransferKind {
14    #[serde(rename = "internal")]
15    Internal,
16    #[serde(rename = "external")]
17    External,
18}
19
20impl Default for TransferKind {
21    fn default() -> Self {
22        Self::Internal
23    }
24}
25
26// ─────────────────────────────────────────────────────────────────────────────
27// Actions
28// ─────────────────────────────────────────────────────────────────────────────
29
30#[derive(Clone, Debug, Serialize, Deserialize)]
31#[serde(rename_all = "camelCase")]
32pub struct CreateSubAccount {
33    /// sub-account name
34    pub name: Arc<str>,
35    /// amount of margin to transfer
36    #[serde(default, skip_serializing_if = "Option::is_none")]
37    pub margin_amount: Option<f64>,
38
39    #[serde(skip)]
40    pub meta: ActionMeta,
41}
42
43#[derive(Clone, Debug, Serialize, Deserialize)]
44#[serde(rename_all = "camelCase")]
45pub struct RemoveSubAccount {
46    /// sub-account to be removed
47    #[serde(with = "crate::msgs::serde_pubkey")]
48    pub to_remove: Pubkey,
49
50    #[serde(skip)]
51    pub meta: ActionMeta,
52}
53
54
55#[derive(Clone, Debug, Serialize, Deserialize)]
56#[serde(rename_all = "camelCase")]
57pub struct Transfer {
58    /// transfer type
59    #[serde(rename = "k", default)]
60    pub kind: TransferKind,
61
62    /// pubkey of account to transfer from
63    #[serde(with = "crate::msgs::serde_pubkey")]
64    pub from: Pubkey,
65    /// pubkey of account to transfer to
66    #[serde(with = "crate::msgs::serde_pubkey")]
67    pub to: Pubkey,
68    /// amount of instrument to transfer
69    pub margin_amount: f64,
70
71    #[serde(skip)]
72    pub meta: ActionMeta,
73}
74
75#[derive(Clone, Debug, Serialize, Deserialize)]
76#[serde(rename_all = "camelCase")]
77pub struct RenameSubAccount {
78    /// sub-account to be renamed
79    #[serde(with = "crate::msgs::serde_pubkey", rename = "a", alias = "account")]
80    pub account: Pubkey,
81    /// new display name
82    #[serde(rename = "n", alias = "name")]
83    pub name: Arc<str>,
84
85    #[serde(skip)]
86    pub meta: ActionMeta,
87}