Skip to main content

bulk_client/msgs/
subaccounts.rs

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