1use crate::FaucetError;
5use serde::{Deserialize, Serialize};
6use sui_sdk::types::{
7 base_types::{ObjectID, SuiAddress},
8 digests::TransactionDigest,
9};
10
11#[derive(Serialize, Deserialize, Debug, Clone)]
12pub enum FaucetRequest {
13 FixedAmountRequest(FixedAmountRequest),
14}
15
16#[derive(Serialize, Deserialize, Debug, Clone)]
17pub struct FixedAmountRequest {
18 pub recipient: SuiAddress,
19}
20
21impl FaucetRequest {
22 pub fn new_fixed_amount_request(recipient: impl Into<SuiAddress>) -> Self {
23 Self::FixedAmountRequest(FixedAmountRequest {
24 recipient: recipient.into(),
25 })
26 }
27}
28
29#[derive(Serialize, Deserialize, Debug)]
30pub enum RequestStatus {
31 Success,
32 Failure(FaucetError),
33}
34
35#[derive(Serialize, Deserialize, Debug)]
36pub struct FaucetResponse {
37 pub status: RequestStatus,
38 pub coins_sent: Option<Vec<CoinInfo>>,
39}
40
41#[derive(Serialize, Deserialize, Debug, Clone)]
42#[serde(rename_all = "camelCase")]
43pub struct CoinInfo {
44 pub amount: u64,
45 pub id: ObjectID,
46 pub transfer_tx_digest: TransactionDigest,
47}
48
49impl From<FaucetError> for FaucetResponse {
50 fn from(value: FaucetError) -> Self {
51 FaucetResponse {
52 status: RequestStatus::Failure(value),
53 coins_sent: None,
54 }
55 }
56}
57
58impl From<reqwest::Error> for FaucetResponse {
59 fn from(value: reqwest::Error) -> Self {
60 FaucetResponse {
61 status: RequestStatus::Failure(FaucetError::internal(value)),
62 coins_sent: None,
63 }
64 }
65}