bee_rest_api/types/
responses.rs

1// Copyright 2020-2021 IOTA Stiftung
2// SPDX-License-Identifier: Apache-2.0
3
4use crate::types::{
5    body::BodyInner,
6    dtos::{LedgerInclusionStateDto, MessageDto, OutputDto, PeerDto, ReceiptDto},
7};
8
9use serde::{Deserialize, Serialize};
10
11/// Response of GET /api/v1/info.
12/// Returns general information about the node.
13#[derive(Clone, Debug, Serialize, Deserialize)]
14pub struct InfoResponse {
15    pub name: String,
16    pub version: String,
17    #[serde(rename = "isHealthy")]
18    pub is_healthy: bool,
19    #[serde(rename = "networkId")]
20    pub network_id: String,
21    #[serde(rename = "bech32HRP")]
22    pub bech32_hrp: String,
23    #[serde(rename = "minPoWScore")]
24    pub min_pow_score: f64,
25    #[serde(rename = "messagesPerSecond")]
26    pub messages_per_second: f64,
27    #[serde(rename = "referencedMessagesPerSecond")]
28    pub referenced_messages_per_second: f64,
29    #[serde(rename = "referencedRate")]
30    pub referenced_rate: f64,
31    #[serde(rename = "latestMilestoneTimestamp")]
32    pub latest_milestone_timestamp: u64,
33    #[serde(rename = "latestMilestoneIndex")]
34    pub latest_milestone_index: u32,
35    #[serde(rename = "confirmedMilestoneIndex")]
36    pub confirmed_milestone_index: u32,
37    #[serde(rename = "pruningIndex")]
38    pub pruning_index: u32,
39    pub features: Vec<String>,
40}
41
42impl BodyInner for InfoResponse {}
43
44/// Response of GET /api/v1/tips.
45/// Returns non-lazy tips.
46#[derive(Clone, Debug, Serialize, Deserialize)]
47pub struct TipsResponse {
48    #[serde(rename = "tipMessageIds")]
49    pub tip_message_ids: Vec<String>,
50}
51
52impl BodyInner for TipsResponse {}
53
54/// Response of POST /api/v1/messages.
55/// Returns the message identifier of the submitted message.
56#[derive(Clone, Debug, Serialize, Deserialize)]
57pub struct SubmitMessageResponse {
58    #[serde(rename = "messageId")]
59    pub message_id: String,
60}
61
62impl BodyInner for SubmitMessageResponse {}
63
64/// Response of GET /api/v1/messages?index={INDEX}.
65/// Returns all messages ids that match a given indexation key.
66#[derive(Clone, Debug, Serialize, Deserialize)]
67pub struct MessagesFindResponse {
68    pub index: String,
69    #[serde(rename = "maxResults")]
70    pub max_results: usize,
71    pub count: usize,
72    #[serde(rename = "messageIds")]
73    pub message_ids: Vec<String>,
74}
75
76impl BodyInner for MessagesFindResponse {}
77
78/// Response of GET /api/v1/messages/{message_id}.
79/// Returns a specific message.
80#[derive(Clone, Debug, Serialize, Deserialize)]
81pub struct MessageResponse(pub MessageDto);
82
83impl BodyInner for MessageResponse {}
84
85/// Response of GET /api/v1/messages/{message_id}/metadata.
86/// Returns the metadata of a message.
87#[derive(Clone, Debug, Serialize, Deserialize)]
88pub struct MessageMetadataResponse {
89    #[serde(rename = "messageId")]
90    pub message_id: String,
91    #[serde(rename = "parentMessageIds")]
92    pub parent_message_ids: Vec<String>,
93    #[serde(rename = "isSolid")]
94    pub is_solid: bool,
95    #[serde(rename = "referencedByMilestoneIndex", skip_serializing_if = "Option::is_none")]
96    pub referenced_by_milestone_index: Option<u32>,
97    #[serde(rename = "milestoneIndex", skip_serializing_if = "Option::is_none")]
98    pub milestone_index: Option<u32>,
99    #[serde(rename = "ledgerInclusionState", skip_serializing_if = "Option::is_none")]
100    pub ledger_inclusion_state: Option<LedgerInclusionStateDto>,
101    #[serde(rename = "conflictReason", skip_serializing_if = "Option::is_none")]
102    pub conflict_reason: Option<u8>,
103    #[serde(rename = "shouldPromote", skip_serializing_if = "Option::is_none")]
104    pub should_promote: Option<bool>,
105    #[serde(rename = "shouldReattach", skip_serializing_if = "Option::is_none")]
106    pub should_reattach: Option<bool>,
107}
108
109impl BodyInner for MessageMetadataResponse {}
110
111/// Response of GET /api/v1/messages/{message_id}/children.
112/// Returns all children of a specific message.
113#[derive(Clone, Debug, Serialize, Deserialize)]
114pub struct MessageChildrenResponse {
115    #[serde(rename = "messageId")]
116    pub message_id: String,
117    #[serde(rename = "maxResults")]
118    pub max_results: usize,
119    pub count: usize,
120    #[serde(rename = "childrenMessageIds")]
121    pub children_message_ids: Vec<String>,
122}
123
124impl BodyInner for MessageChildrenResponse {}
125
126/// Response of GET /api/v1/outputs/{output_id}.
127/// Returns all information about a specific output.
128#[derive(Clone, Debug, Serialize, Deserialize)]
129pub struct OutputResponse {
130    #[serde(rename = "messageId")]
131    pub message_id: String,
132    #[serde(rename = "transactionId")]
133    pub transaction_id: String,
134    #[serde(rename = "outputIndex")]
135    pub output_index: u16,
136    #[serde(rename = "isSpent")]
137    pub is_spent: bool,
138    pub output: OutputDto,
139    #[serde(rename = "ledgerIndex", default)]
140    pub ledger_index: u32,
141}
142
143impl BodyInner for OutputResponse {}
144
145/// Response of GET /api/v1/addresses/{address}.
146/// Returns information about an address.
147#[derive(Clone, Debug, Serialize, Deserialize)]
148pub struct BalanceAddressResponse {
149    #[serde(rename = "addressType")]
150    pub address_type: u8,
151    pub address: String,
152    pub balance: u64,
153    #[serde(rename = "dustAllowed")]
154    pub dust_allowed: bool,
155    #[serde(rename = "ledgerIndex", default)]
156    pub ledger_index: u32,
157}
158
159impl BodyInner for BalanceAddressResponse {}
160
161/// Response of GET /api/v1/addresses/{address}/outputs.
162/// Returns the outputs of an address.
163#[derive(Clone, Debug, Serialize, Deserialize)]
164pub struct OutputsAddressResponse {
165    #[serde(rename = "addressType")]
166    pub address_type: u8,
167    pub address: String,
168    #[serde(rename = "maxResults")]
169    pub max_results: usize,
170    pub count: usize,
171    #[serde(rename = "outputIds")]
172    pub output_ids: Vec<String>,
173    #[serde(rename = "ledgerIndex", default)]
174    pub ledger_index: u32,
175}
176
177impl BodyInner for OutputsAddressResponse {}
178
179/// Response of:
180/// * GET /api/v1/receipts/{milestone_index}, returns all stored receipts for the given milestone index.
181/// * GET /api/v1/receipts, returns all stored receipts, independent of a milestone index.
182#[derive(Clone, Debug, Serialize, Deserialize)]
183pub struct ReceiptsResponse {
184    pub receipts: Vec<ReceiptDto>,
185}
186
187impl BodyInner for ReceiptsResponse {}
188
189/// Response of GET /api/v1/treasury.
190/// Returns all information about the treasury.
191#[derive(Clone, Debug, Serialize, Deserialize)]
192pub struct TreasuryResponse {
193    #[serde(rename = "milestoneId")]
194    pub milestone_id: String,
195    pub amount: u64,
196}
197
198impl BodyInner for TreasuryResponse {}
199
200/// Response of GET /api/v1/milestone/{milestone_index}.
201/// Returns information about a milestone.
202#[derive(Clone, Debug, Serialize, Deserialize)]
203pub struct MilestoneResponse {
204    #[serde(rename = "index")]
205    pub milestone_index: u32,
206    #[serde(rename = "messageId")]
207    pub message_id: String,
208    pub timestamp: u64,
209}
210
211impl BodyInner for MilestoneResponse {}
212
213/// Response of GET /api/v1/milestone/{milestone_index}/utxo-changes.
214/// Returns all UTXO changes that happened at a specific milestone.
215#[derive(Clone, Debug, Serialize, Deserialize)]
216pub struct UtxoChangesResponse {
217    pub index: u32,
218    #[serde(rename = "createdOutputs")]
219    pub created_outputs: Vec<String>,
220    #[serde(rename = "consumedOutputs")]
221    pub consumed_outputs: Vec<String>,
222}
223
224impl BodyInner for UtxoChangesResponse {}
225
226/// Response of GET /api/v1/peers.
227/// Returns information about all peers of the node.
228#[derive(Clone, Debug, Serialize, Deserialize)]
229pub struct PeersResponse(pub Vec<PeerDto>);
230
231impl BodyInner for PeersResponse {}
232
233/// Response of POST /api/v1/peers.
234/// Returns information about the added peer.
235#[derive(Clone, Debug, Serialize, Deserialize)]
236pub struct AddPeerResponse(pub PeerDto);
237
238impl BodyInner for AddPeerResponse {}
239
240/// Response of GET /api/v1/peer/{peer_id}.
241/// Returns information about a specific peer of the node.
242#[derive(Clone, Debug, Serialize, Deserialize)]
243pub struct PeerResponse(pub PeerDto);
244
245impl BodyInner for PeerResponse {}
246
247/// Response of GET /api/plugins/debug/whiteflag.
248/// Returns the computed merkle tree hash for the given white flag traversal.
249#[derive(Clone, Debug, Serialize, Deserialize)]
250pub struct WhiteFlagResponse {
251    #[serde(rename = "merkleTreeHash")]
252    pub merkle_tree_hash: String,
253}
254
255impl BodyInner for WhiteFlagResponse {}